home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / andy.lha / TWOPLAYER.s < prev    next >
Text File  |  1995-04-24  |  123KB  |  8,312 lines

  1.  
  2. maxscrdiv EQU 8
  3. max3ddiv EQU 5
  4. playerheight EQU 12*1024
  5. playercrouched EQU 6*1024
  6. scrheight EQU 80
  7.  
  8. ; k/j/m
  9. ; 4/8
  10. ; s/x
  11. ; b/n
  12.  
  13. xpos EQU 0    ;l
  14. zpos EQU 4    ;l
  15. zsinval EQU 8    ;w
  16. zcosval EQU 10    ;w
  17. ztox EQU 12    ;l
  18. xsinval EQU 16    ;w
  19. xcosval EQU 18    ;w
  20. xspd EQU 20    ;w
  21. zspd EQU 22    ;wd
  22. mapx EQU 24    ;b
  23. mapz EQU 25    ;b
  24. whichtile EQU 26 ;b
  25. xofflight EQU 28    ;w
  26. zofflight EQU 30    ;w
  27. offlight EQU 32        ;w
  28. zlinestore EQU 34
  29. zlinedir EQU 38
  30. zposdir EQU 40
  31. zposstore EQU 42
  32. xdiststore EQU 44
  33. xdistdir EQU 46
  34. zwallfound EQU 48
  35.  
  36. xlinestore EQU 50
  37. xlinedir EQU 54
  38. xposdir EQU 56
  39. xposstore EQU 58
  40. zdiststore EQU 60
  41. zdistdir EQU 62
  42. xwallfound EQU 64
  43.  
  44.  
  45. midoffset EQU 104*4*40
  46.  
  47.  SECTION Scrn,CODE
  48. OpenLib         equ -552
  49. CloseLib        equ -414
  50.  
  51. INTREQ    equ    $09C
  52. INTENA    equ    $09A
  53. INTENAR    equ    $01C
  54. DMACON    equ    $096
  55.  
  56. SERPER    equ    $032
  57. SERDATR    equ    $018
  58. SERDAT    equ    $030
  59. vhposr        equ $006    
  60. vhposrl        equ $007 
  61.  
  62. bltcon0        equ $40 
  63. bltcon1        equ $42
  64. bltcpt        equ $48
  65. bltbpt        equ $4c
  66. bltapt        equ $50
  67. spr0ctl        equ $142
  68. spr1ctl        equ $14a
  69. spr2ctl        equ $152
  70. spr3ctl        equ $15a
  71. spr4ctl        equ $162
  72. spr5ctl        equ $16a
  73. spr6ctl        equ $172
  74. spr7ctl        equ $17a
  75. spr0pos        equ $140
  76. spr1pos        equ $148
  77. spr2pos        equ $150
  78. spr3pos        equ $158
  79. spr4pos        equ $160
  80. spr5pos        equ $168
  81. spr6pos        equ $170
  82. spr7pos        equ $178
  83. bltdpt         equ $54
  84. bltafwm        equ $44
  85. bltalwm        equ $46
  86. bltsize         equ $58
  87. bltcmod         equ $60
  88. bltbmod         equ $62
  89. bltamod         equ $64
  90. bltdmod         equ $66
  91. diwstart        equ $8e         ; Screen hardware registers.
  92. diwstop         equ $90
  93. ddfstart        equ $92
  94. ddfstop         equ $94
  95. bplcon0         equ $100
  96. bplcon1         equ $102
  97. col0            equ $180
  98. col1            equ $182
  99. col2        equ $184
  100. col3        equ $186
  101. col4        equ $188
  102. col5        equ $18a
  103. col6        equ $18c
  104. col7        equ $18e
  105. col8            equ $190
  106. col9            equ $192
  107. col10           equ $194
  108. dmacon        equ $96
  109. dmaconr        equ $002
  110. intenar        equ $01c
  111. intena        equ $09a
  112. intreq        equ $09c
  113. intreqr        equ $01e
  114. intreqrl    equ $01f
  115. bpl1pth         equ $e0
  116. bpl1ptl         equ $e2
  117. bpl2pth        equ $e4
  118. bpl2ptl        equ $e6
  119. bpl3pth        equ $e8
  120. bpl3ptl        equ $ea
  121. bpl4pth        equ $ec
  122. bpl4ptl        equ $ee
  123. bpl5pth        equ $f0
  124. bpl5ptl        equ $f2
  125. bpl6pth        equ $f4
  126. bpl6ptl        equ $f6
  127. bpl7pth        equ $f8
  128. bpl7ptl        equ $fa
  129. bpl8pth        equ $fc
  130. bpl8ptl        equ $fe
  131. spr0pth        equ $120
  132. spr0ptl        equ $122
  133. spr1pth        equ $124
  134. spr1ptl        equ $126
  135. spr2pth        equ $128
  136. spr2ptl        equ $12a
  137. spr3pth        equ $12c
  138. spr3ptl        equ $12e
  139. spr4pth        equ $130
  140. spr4ptl        equ $132
  141. spr5pth        equ $134
  142. spr5ptl        equ $136
  143. spr6pth        equ $138
  144. spr6ptl        equ $13a
  145. spr7pth        equ $13c
  146. spr7ptl        equ $13e
  147.  
  148. ; move.l #length,d0
  149. ; moveq.l #2,d1    ; chipmem
  150. ; move.l 4.w,a6
  151. ; jsr allocmem(a6) = -198
  152.  
  153. ; tst.l d0
  154. ; beq.s ohbugger
  155. ; move.l d0,memaddr
  156.  
  157.  
  158. ; move.l 4.w,a6
  159. ; move.l memaddr,a1
  160. ; move.l #size,d0
  161. ; jsr freemem(a6) =-210
  162.  
  163.  
  164. ** This waits for the blitter to finish before allowing program
  165. ** execution to continue.
  166.  
  167. WB MACRO
  168. \@bf:
  169.  btst #6,dmaconr(a6)
  170.  bne.s \@bf
  171.  ENDM
  172.  
  173. *Another version for when d6 <> dff000
  174.  
  175. WBSLOW MACRO
  176. \@bf:
  177.  btst #6,$dff000+dmaconr
  178.  bne.s \@bf
  179.  ENDM
  180.  
  181. WT MACRO
  182. \@bf:
  183.  btst #6,(a3)
  184.  bne.s \@bd
  185.  rts
  186. \@bd: 
  187.  btst #4,(a0)
  188.  beq.s \@bf
  189.  ENDM
  190.  
  191. WTNOT MACRO
  192. \@bf:
  193.  btst #6,(a3)
  194.  bne.s \@bd
  195.  rts
  196. \@bd: 
  197.  btst #4,(a0)
  198.  bne.s \@bf
  199.  ENDM
  200.  
  201. **
  202.  
  203.  include "macros.i"
  204.  include "ab3:source/defs.i"
  205.  
  206.  move.w (a0)+,mors
  207.  
  208. * Load level into buffers.
  209.  clr.b doanything
  210.  
  211.  move.l 4.w,a6
  212.  move.l #doslibname,a1
  213.  moveq #0,d0
  214.  jsr -552(a6)
  215.  move.l d0,doslib
  216.  
  217. ; bra noload
  218.  
  219.  move.l d0,a6
  220.  move.l #LDname,d1
  221.  move.l #1005,d2
  222.  jsr -30(a6)
  223.  move.l d0,LDhandle
  224.  
  225.  move.l doslib,a6
  226.  move.l d0,d1
  227.  move.l #LEVELDATA,d2
  228.  move.l #70000,d3
  229.  jsr -42(a6)
  230.  
  231.  move.l doslib,a6
  232.  move.l LDhandle,d1
  233.  jsr -36(a6)
  234.  
  235. ********
  236.  
  237.  move.l doslib,a6
  238.  move.l #LGname,d1
  239.  move.l #1005,d2
  240.  jsr -30(a6)
  241.  move.l d0,LGhandle
  242.  
  243.  move.l doslib,a6
  244.  move.l d0,d1
  245.  move.l #LEVELGRAPHICS,d2
  246.  move.l #30000,d3
  247.  jsr -42(a6)
  248.  
  249.  move.l doslib,a6
  250.  move.l LGhandle,d1
  251.  jsr -36(a6)
  252.  
  253. ********
  254.  
  255.  move.l doslib,a6
  256.  move.l #LCname,d1
  257.  move.l #1005,d2
  258.  jsr -30(a6)
  259.  move.l d0,LChandle
  260.  
  261.  move.l doslib,a6
  262.  move.l d0,d1
  263.  move.l #LEVELCLIPS,d2
  264.  move.l #50000,d3
  265.  jsr -42(a6)
  266.  
  267.  move.l doslib,a6
  268.  move.l LChandle,d1
  269.  jsr -36(a6)
  270.  
  271. *******
  272.  
  273. noload:
  274.  
  275. ********
  276.  
  277.  jsr LOADWALLS
  278.  
  279. ; move.l doslib,a6
  280. ; move.l #Prefsname,d1
  281. ; move.l #1005,d2
  282. ; jsr -30(a6)
  283. ; move.l d0,Prefshandle
  284.  
  285. ; move.l doslib,a6
  286. ; move.l d0,d1
  287. ; move.l #Prefsfile,d2
  288. ; move.l #50,d3
  289. ; jsr -42(a6)
  290.  
  291. ; move.l doslib,a6
  292. ; move.l Prefshandle,d1
  293. ; jsr -36(a6)
  294.  
  295. *******
  296.  
  297.  cmp.b #'s',Prefsfile+2
  298.  seq STEREO
  299.  
  300.  move.l doslib,d0
  301.  move.l d0,a1
  302.  move.l 4.w,a6
  303.  jsr CloseLib(a6)
  304.  
  305.  jmp stuff
  306. endstuff:
  307.  
  308.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  309.  move.w #184,SERPER(a6)    ;19200 baud, 8 bits, no parity
  310.  
  311.  move.w #$87c0,dmacon(a6)
  312.  move.w #$8020,dmacon(a6)
  313.  move.w intenar(a6),saveinters
  314.  move.w #$7fff,intena(a6)
  315.  move.w #$00ff,$dff09e
  316.  
  317. *** Put myself in supervisor mode
  318.  
  319.  move.l #blag,$80
  320.  trap #0
  321. ; move.l $6c,d0
  322. ; move.l #blag,$6c
  323. ; move.w #$8010,intreq(a6)
  324.  
  325.  rts
  326.  
  327. saveit: ds.l 10
  328. doslibname: dc.b 'dos.library',0
  329.  even
  330. doslib: dc.l 0
  331.  
  332. mors: dc.w 0
  333.  
  334. LDname: dc.b 'ab3:includes/tstlev.bin',0
  335.  even
  336. LDhandle: dc.l 0
  337. LGname: dc.b 'ab3:includes/tstlev.graph.bin',0
  338.  even
  339. LGhandle: dc.l 0
  340. LCname: dc.b 'ab3:includes/tstlev.clips',0
  341.  even
  342. LChandle: dc.l 0
  343.  
  344. Prefsname: dc.b 'ram:prefs',0
  345.  even
  346. Prefshandle: dc.l 0
  347.  
  348. Prefsfile:
  349.  dc.b 'k4nx'
  350.  ds.b 50
  351.  
  352.  even
  353.  
  354. blag:
  355. ; move.w #$10,intreq(a6)
  356. ; move.l d0,$6c
  357. ; move.w #$7fff,intena(a6)
  358.  
  359.  move.w #$20,$dff1dc
  360.  
  361.  move.l $6c,saveit
  362.  move.l #Chan0inter,$6c
  363.  jsr KInt_Init
  364.  
  365.  
  366.  
  367. ****************************
  368. * Initialize level
  369. ****************************
  370. * Poke all clip offsets into
  371. * correct bit of level data.
  372. ****************************
  373.  lea.l LEVELGRAPHICS,a0
  374.  move.l 12(a0),a1
  375.  add.l a0,a1
  376.  move.l a1,ZoneGraphAdds
  377.  move.l (a0),a1
  378.  add.l a0,a1
  379.  move.l a1,DoorData
  380.  move.l 4(a0),a1
  381.  add.l a0,a1
  382.  move.l a1,LiftData
  383.  move.l 8(a0),a1
  384.  add.l a0,a1
  385.  move.l a1,SwitchData
  386.  adda.w #16,a0
  387.  move.l a0,ZoneAdds
  388.  
  389.  lea.l LEVELDATA,a1
  390.  move.l 16+6(a1),a2
  391.  add.l a1,a2
  392.  move.l a2,Points
  393.  move.w 8+6(a1),d0
  394.  lea 4(a2,d0.w*4),a2
  395.  move.l a2,PointBrights
  396.  
  397.  move.l 20+6(a1),a2
  398.  add.l a1,a2
  399.  move.l a2,FloorLines
  400.  move.l 24+6(a1),a2
  401.  add.l a1,a2
  402.  move.l a2,ObjectData
  403.  move.l 28+6(a1),a2
  404.  add.l a1,a2
  405.  move.l a2,PlayerShotData
  406.  move.l 32+6(a1),a2
  407.  add.l a1,a2
  408.  move.l a2,NastyShotData
  409.  move.l 36+6(a1),a2
  410.  add.l a1,a2
  411.  move.l a2,ObjectPoints  
  412.  move.l 40+6(a1),a2
  413.  add.l a1,a2
  414.  move.l a2,PLR1_Obj
  415.  move.l 44+6(a1),a2
  416.  add.l a1,a2
  417.  move.l a2,PLR2_Obj
  418.  move.w 14+6(a1),NumObjectPoints
  419.  
  420. ; bra noclips
  421.   
  422.  lea.l LEVELCLIPS,a2
  423.  moveq #0,d0
  424.  move.w 10+6(a1),d7    ;numzones
  425. assignclips:
  426.  move.l (a0)+,a3
  427.  add.l a1,a3    ; pointer to a zone
  428.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  429. dowholezone:
  430.  tst.w (a3)
  431.  blt.s nomorethiszone
  432.  tst.w 2(a3)
  433.  blt.s thisonenull
  434.  
  435.  move.l d0,d1
  436.  asr.l #1,d1
  437.  move.w d1,2(a3)
  438.  
  439. findnextclip:
  440.  cmp.w #-2,(a2,d0.l)
  441.  beq.s foundnextclip
  442.  addq.l #2,d0
  443.  bra.s findnextclip
  444. foundnextclip
  445.  addq.l #2,d0
  446.  
  447. thisonenull:
  448.  addq #8,a3 
  449.  bra.s dowholezone
  450. nomorethiszone:
  451.  dbra d7,assignclips
  452.  
  453.  lea (a2,d0.l),a2
  454.  move.l a2,CONNECT_TABLE
  455.  
  456. noclips:
  457.  
  458. * Put in addresses of glowything
  459.  
  460.  move.l red_des,a0
  461.  move.w (a0),d0
  462.  addq #1,d0
  463.  muls #6,d0
  464.  lea 2(a0,d0.w),a1
  465.  move.l red_des+4,a0
  466.  move.l a1,(a0)
  467.  move.w #0,(a1)
  468.  
  469.  move.l yellow_des,a0
  470.  move.w (a0),d0
  471.  addq #1,d0
  472.  muls #6,d0
  473.  lea 2(a0,d0.w),a1
  474.  move.l yellow_des+4,a0
  475.  move.l a1,(a0)
  476.  move.w #0,(a1)
  477.  
  478.  move.l green_des,a0
  479.  move.w (a0),d0
  480.  addq #1,d0
  481.  muls #6,d0
  482.  lea 2(a0,d0.w),a1
  483.  move.l green_des+4,a0
  484.  move.l a1,(a0)
  485.  move.w #0,(a1)
  486.  
  487.  move.l blue_des,a0
  488.  move.w (a0),d0
  489.  addq #1,d0
  490.  muls #6,d0
  491.  lea 2(a0,d0.w),a1
  492. ; move.l #protinit-750000,a6
  493.  move.l blue_des+4,a0
  494.  move.l a1,(a0)
  495.  move.w #0,(a1)
  496.  
  497.  
  498. ************************************
  499.  
  500.  cmp.b #'k',Prefsfile
  501.  bne.s nkb
  502.  st PLR1KEYS
  503.  clr.b PLR1PATH
  504.  clr.b PLR1MOUSE
  505.  clr.b PLR1JOY
  506. nkb:
  507.  cmp.b #'m',Prefsfile
  508.  bne.s nmc
  509.  clr.b PLR1KEYS
  510.  clr.b PLR1PATH
  511.  st PLR1MOUSE
  512.  clr.b PLR1JOY
  513. nmc:
  514.  cmp.b #'j',Prefsfile
  515.  bne.s njc
  516.  clr.b PLR1KEYS
  517.  clr.b PLR1PATH
  518.  clr.b PLR1MOUSE
  519.  st PLR1JOY
  520. njc:
  521.  
  522.  clr.b PLR1_StoodInTop
  523.  move.l #playerheight,PLR1s_height
  524.  
  525.  move.l #empty,pos1LEFT
  526.  move.l #empty,pos2LEFT
  527.  move.l #empty,pos1RIGHT
  528.  move.l #empty,pos2RIGHT
  529.  move.l #emptyend,Samp0endLEFT
  530.  move.l #emptyend,Samp1endLEFT
  531.  move.l #emptyend,Samp0endRIGHT
  532.  move.l #emptyend,Samp1endRIGHT
  533.  
  534.  move.l #nullspr,d0
  535.  move.w d0,s4l
  536.  move.w d0,s5l
  537.  move.w d0,s6l
  538.  move.w d0,s7l
  539.  swap d0
  540.  move.w d0,s4h
  541.  move.w d0,s5h
  542.  move.w d0,s6h
  543.  move.w d0,s7h 
  544.  
  545.  move.l #nullline,d0
  546.  move.w d0,n1l
  547.  swap d0
  548.  move.w d0,n1h
  549.  
  550.  move.l #Panel,d0
  551.  move.w d0,p1l
  552.  swap d0
  553.  move.w d0,p1h
  554.  move.l #Panel+40,d0
  555.  move.w d0,p2l
  556.  swap d0
  557.  move.w d0,p2h
  558.  move.l #Panel+40*2,d0
  559.  move.w d0,p3l
  560.  swap d0
  561.  move.w d0,p3h
  562.  move.l #Panel+40*3,d0
  563.  move.w d0,p4l
  564.  swap d0
  565.  move.w d0,p4h
  566.  move.l #Panel+40*4,d0
  567.  move.w d0,p5l
  568.  swap d0
  569.  move.w d0,p5h
  570.  move.l #Panel+40*5,d0
  571.  move.w d0,p6l
  572.  swap d0
  573.  move.w d0,p6h
  574.  move.l #Panel+40*6,d0
  575.  move.w d0,p7l
  576.  swap d0
  577.  move.w d0,p7h
  578.  move.l #Panel+40*7,d0
  579.  move.w d0,p8l
  580.  swap d0
  581.  move.w d0,p8h
  582.  
  583. *******************************
  584. * TIMER SCREEN SETUP
  585. ; move.l #TimerScr,d0
  586. ; move.w d0,p1l
  587. ; swap d0
  588. ; move.w d0,p1h
  589. ; move.w #$1201,Panelcon
  590.  
  591.  move.l #borders,d0
  592.  move.w d0,s0l
  593.  swap d0
  594.  move.w d0,s0h
  595.  move.l #borders+2592,d0
  596.  move.w d0,s1l
  597.  swap d0
  598.  move.w d0,s1h
  599.  move.l #borders+2592*2,d0
  600.  move.w d0,s2l
  601.  swap d0
  602.  move.w d0,s2h
  603.  move.l #borders+2592*3,d0
  604.  move.w d0,s3l
  605.  swap d0
  606.  move.w d0,s3h
  607.  
  608.  move.w #52*256+64,borders
  609.  move.w #212*256+0,borders+8
  610.  move.w #52*256+64,borders+2592
  611.  move.w #212*256+128,borders+8+2592
  612.  move.w #52*256+192,borders+2592*2
  613.  move.w #212*256+0,borders+8+2592*2
  614.  move.w #52*256+192,borders+2592*3
  615.  move.w #212*256+128,borders+8+2592*3
  616.  
  617.  move.l #FacePlace,d0
  618.  move.w d0,f1l
  619.  swap d0
  620.  move.w d0,f1h
  621.  move.l #FacePlace+32*24,d0
  622.  move.w d0,f2l
  623.  swap d0
  624.  move.w d0,f2h
  625.  move.l #FacePlace+32*24*2,d0
  626.  move.w d0,f3l
  627.  swap d0
  628.  move.w d0,f3h
  629.  move.l #FacePlace+32*24*3,d0
  630.  move.w d0,f4l
  631.  swap d0
  632.  move.w d0,f4h
  633.  move.l #FacePlace+32*24*4,d0
  634.  move.w d0,f5l
  635.  swap d0
  636.  move.w d0,f5h
  637.  
  638.  move.l #PanelCop,d0
  639.  move.w d0,pcl1
  640.  move.w d0,pcl2
  641.  swap d0
  642.  move.w d0,pch1
  643.  move.w d0,pch2
  644.  
  645.  move.l #bigfield,d0
  646.  move.w d0,ocl
  647.  swap d0
  648.  move.w d0,och
  649.  
  650.  bset.b #1,$bfe001
  651.  
  652.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  653.  move.w #$00ff,$dff09e
  654.  
  655. ; move.l #Blurbfield,$dff080
  656.  
  657.  move.w #0,d0
  658.  
  659.  move.l #scrn,d0
  660.  move.w d0,pl1l
  661.  swap d0
  662.  move.w d0,pl1h
  663.  
  664.  move.l #scrn+40,d0
  665.  move.w d0,pl2l
  666.  swap d0
  667.  move.w d0,pl2h
  668.  
  669.  move.l #scrn+80,d0
  670.  move.w d0,pl3l
  671.  swap d0
  672.  move.w d0,pl3h
  673.  
  674.  move.l #scrn+120,d0
  675.  move.w d0,pl4l
  676.  swap d0
  677.  move.w d0,pl4h
  678.  
  679.  move.l #scrn+160,d0
  680.  move.w d0,pl5l
  681.  swap d0
  682.  move.w d0,pl5h
  683.  
  684.  move.l #scrn+200,d0
  685.  move.w d0,pl6l
  686.  swap d0
  687.  move.w d0,pl6h
  688.  
  689.  move.l #scrn+240,d0
  690.  move.w d0,pl7l
  691.  swap d0
  692.  move.w d0,pl7h
  693.  
  694.  move.l #healthpal,a5
  695.  move.l #colbars,a0
  696.  move.l #colbars2,a2
  697.  move.w #scrheight-1,d0
  698.  move.l #0,d6
  699.  move.w #0,d3
  700.  move.w #$2bdf,startwait
  701.  move.w #$2d01,endwait
  702. fillcop
  703.  move.w #$180,d1
  704.  
  705.  move.l a0,a1
  706.  move.l a2,a3
  707.  move.w #$10c,(a1)+
  708.  move.w #$10c,(a3)+
  709.  move.w d3,(a1)+
  710.  move.w d3,(a3)+
  711.  eor.w #$8000,d3
  712.  
  713.  move.w #$106,(a1)+
  714.  move.w #$106,(a3)+
  715.  move.w #$2c42,d5
  716.  or.w d3,d5
  717.  and.w #$fffe,d5
  718.  move.w d5,(a1)+
  719.  move.w d5,(a3)+
  720.  bsr do32
  721.  
  722.  move.w #$106,(a1)+
  723.  move.w #$106,(a3)+
  724.  move.w #$4c42,d5
  725.  or.w d3,d5
  726.  and.w #$fffe,d5
  727.  move.w d5,(a1)+
  728.  move.w d5,(a3)+
  729.  bsr do32
  730.  
  731.  move.w #$106,(a1)+
  732.  move.w #$106,(a3)+
  733.  move.w #$6c42,d5
  734.  or.w d3,d5
  735.  and.w #$fffe,d5
  736.  move.w d5,(a1)+
  737.  move.w d5,(a3)+
  738.  bsr do32
  739.  
  740. **********************************
  741.  
  742.  cmp.b #'s',option
  743.  bra.s smallscrn
  744.  
  745.  move.w startwait,(a1)+
  746.  move.w #$fffe,(a1)+
  747.  move.w endwait,(a1)+
  748.  move.w #$ff00,(a1)+
  749.  move.w startwait,(a3)+
  750.  move.w #$fffe,(a3)+
  751.  move.w endwait,(a3)+
  752.  move.w #$ff00,(a3)+
  753.  
  754.  
  755.  add.w #$300,startwait
  756.  add.w #$300,endwait
  757.  
  758. smallscrn: 
  759.  
  760.  move.l #$1060c42,(a1)+
  761.  move.l #$1060c42,(a3)+
  762.  move.w #$19e,(a1)+
  763.  move.w (a5),(a1)+
  764.  move.w #$19e,(a3)+
  765.  move.w (a5)+,(a3)+
  766.  
  767. **********************************
  768.  
  769.  adda.w #104*4,a0
  770.  adda.w #104*4,a2
  771.  
  772.  dbra d0,fillcop
  773.  
  774. **********************************
  775.  cmp.b #'s',option
  776.  bra smallnotlarge
  777.  move.w #$38,fetchstart
  778.  move.w #$b8,fetchstop
  779.  move.w #$2c81,winstart
  780.  move.w #$2cc1,winstop
  781.  move.w #-40,modulo
  782.  move.w #-40,modulo+4
  783.  
  784.  move.l #scrn+40,a0
  785.  move.l #scrn+160,a1
  786.  move.l #scrn+280,a2
  787.  move.l #scrntab,a3
  788.  move.w #319,d7    ; counter
  789.  move.w #0,d1    ; xpos
  790. plotscrnloop:
  791.  move.b (a3)+,d0
  792.  move.w d1,d2
  793.  asr.w #3,d2
  794.  move.b d1,d3
  795.  not.b d3
  796.  bclr.b d3,-40(a0,d2.w)
  797.  bclr.b d3,(a0,d2.w)
  798.  bclr.b d3,40(a0,d2.w)
  799.  bclr.b d3,-40(a1,d2.w)
  800.  bclr.b d3,(a1,d2.w)
  801.  bclr.b d3,40(a1,d2.w)
  802.  bclr.b d3,-40(a2,d2.w)
  803.  btst #0,d0
  804.  beq.s nobp1
  805.  bset.b d3,-40(a0,d2.w)
  806. nobp1:
  807.  btst #1,d0
  808.  beq.s nobp2
  809.  bset.b d3,(a0,d2.w)
  810. nobp2:
  811.  btst #2,d0
  812.  beq.s nobp3
  813.  bset.b d3,40(a0,d2.w)
  814. nobp3:
  815.  btst #3,d0
  816.  beq.s nobp4
  817.  bset.b d3,-40(a1,d2.w)
  818. nobp4:
  819.  btst #4,d0
  820.  beq.s nobp5
  821.  bset.b d3,(a1,d2.w)
  822. nobp5:
  823.  btst #5,d0
  824.  beq.s nobp6
  825.  bset.b d3,40(a1,d2.w)
  826. nobp6:
  827.  btst #6,d0
  828.  beq.s nobp7
  829.  bset.b d3,-40(a2,d2.w)
  830. nobp7:
  831.  
  832.  addq #1,d1
  833.  
  834.  dbra d7,plotscrnloop
  835.  
  836. smallnotlarge:
  837.  
  838. **********************************
  839.  
  840. ****************************
  841.  jsr INITPLAYER
  842. ; bsr initobjpos
  843. ****************************
  844.  
  845.  
  846.  move.l #$dff000,a6
  847.  
  848.  move.l #null,$dff0a0
  849.  move.w #100,$dff0a4
  850.  move.w #443,$dff0a6
  851.  move.w #63,$dff0a8
  852.  
  853.  move.l #null2,$dff0b0
  854.  move.w #100,$dff0b4
  855.  move.w #443,$dff0b6
  856.  move.w #63,$dff0b8
  857.  
  858.  move.l #null4,$dff0c0
  859.  move.w #100,$dff0c4
  860.  move.w #443,$dff0c6
  861.  move.w #63,$dff0c8
  862.  
  863.  move.l #null3,$dff0d0
  864.  move.w #100,$dff0d4
  865.  move.w #443,$dff0d6
  866.  move.w #63,$dff0d8
  867.  
  868.  move.l #tab,a1
  869.  move.w #64,d7
  870.  move.w #0,d6
  871. outerlop
  872.  move.l #pretab,a0
  873.  move.w #255,d5
  874. scaledownlop:
  875.  move.b (a0)+,d0
  876.  ext.w d0
  877.  ext.l d0
  878.  muls d6,d0
  879.  asr.l #6,d0
  880.  move.b d0,(a1)+
  881.  dbra d5,scaledownlop
  882.  addq #1,d6
  883.  dbra d7,outerlop
  884.  
  885.  move.l #$dff000,a6
  886.  
  887.  move.w #$c018,intena(a6)
  888.  
  889.  move.w #$f,dmacon(a6)
  890.  move.w #$820f,dmacon(a6)
  891.  
  892. ; bsr protinit
  893.  
  894.  
  895.  bsr FullEnergy
  896.  move.w #63,OldAmmo
  897.  move.w #0,Ammo
  898.  bsr AmmoBar
  899.  move.w #0,OldAmmo
  900.  
  901.  move.w #127,PLR1_energy
  902.  move.w #127,PLR2_energy
  903.  move.b #1,PLR1_GunDamage
  904.  move.b #1,PLR2_GunDamage
  905.  move.w #3,PLR1_GunNoise
  906.  move.w #3,PLR2_GunNoise
  907.  
  908.  move.w #10,PLR1_GunData    ; 10 shots pistol
  909.  st PLR1_GunData+7
  910.  clr.b PLR1_GunData+16+7
  911.  clr.w PLR1_GunData+16
  912.  move.b #0,PLR1_GunSelected
  913.  
  914.  move.w #10,PLR2_GunData    ; 10 shots pistol
  915.  st PLR2_GunData+7
  916.  clr.b PLR2_GunData+16+7
  917.  clr.w PLR2_GunData+16
  918.  move.b #0,PLR2_GunSelected
  919.  
  920. ; move.w #$20,$1dc(a6)
  921.  
  922.  move.w #$0,$dff034
  923.  move.w #0,Conditions
  924.  move.l #KeyMap,a5
  925.  clr.b $45(a5)
  926.  
  927.  move.l #ingame,mt_data
  928.  clr.b UseAllChannels
  929.  
  930. ; cmp.b #'b',Prefsfile+3
  931. ; bne.s .noback
  932. ; jsr mt_init
  933. ;.noback:
  934. ;
  935. ; clr.b CHANNELDATA
  936. ; clr.b CHANNELDATA+8
  937. ; clr.b CHANNELDATA+16
  938. ; clr.b CHANNELDATA+24
  939. ;
  940. ; cmp.b #'b',Prefsfile+3
  941. ; bne.s noreserve
  942. ;
  943. ; st CHANNELDATA
  944. ; st CHANNELDATA+8
  945. ; st CHANNELDATA+16
  946. ; st CHANNELDATA+24
  947. ;noreserve: 
  948.  
  949. ; st CHANNELDATA
  950. ; st CHANNELDATA+8
  951.  
  952.  move.l #bass,pos0LEFT
  953.  move.l #bassend,Samp0endLEFT
  954.  move.l #playerheight,PLR1s_targheight
  955.  move.l #playerheight,PLR1s_height
  956.  move.l #playerheight,PLR2s_targheight
  957.  move.l #playerheight,PLR2s_height
  958.  
  959. ; cmp.b #'n',mors
  960. ; beq.s nohandshake
  961. ;
  962. ; move.b #%11011000,$bfd200
  963. ; move.b #%00010000,$bfd000
  964. ;waitloop:
  965. ; btst.b #4,$bfd000
  966. ; bne.s waitloop
  967. ; move.b #%11000000,$bfd200
  968.  
  969. ;nohandshake:
  970.  st doanything
  971.  
  972. lop: 
  973.  
  974.  st READCONTROLS
  975.  move.l #$dff000,a6
  976.  
  977.  move.w hitcol,d0
  978.  beq.s nofadedownhc
  979.  sub.w #$100,d0
  980.  move.w d0,hitcol
  981.  move.w d0,hitcol2
  982. nofadedownhc:
  983.  
  984.  move.l drawpt,d0
  985.  move.l olddrawpt,drawpt
  986.  move.l d0,olddrawpt
  987.  move.l d0,$dff084
  988.  move.l drawpt,a3
  989.  adda.w #10,a3
  990.  move.l a3,frompt
  991.  add.l #104*4*40,a3
  992.  move.l a3,midpt
  993.  
  994.  cmp.b #'s',mors
  995.  beq.s nowaitslave
  996.  
  997. waitfortop:
  998.  btst.b #0,intreqrl(a6)
  999.  beq waitfortop
  1000.  move.w #$1,intreq(a6)
  1001.  move.l #PLR1_GunData,GunData
  1002.  move.b PLR1_GunSelected,GunSelected
  1003.  bra waitmaster
  1004.  
  1005. nowaitslave:
  1006.  move.l #PLR2_GunData,GunData
  1007.  move.b PLR2_GunSelected,GunSelected
  1008. waitmaster:
  1009.  
  1010.  
  1011.  move.l waterpt,a0
  1012.  move.l (a0)+,watertouse
  1013.  cmp.l #endwaterlist,a0
  1014.  blt.s okwat
  1015.  move.l #waterlist,a0
  1016. okwat:
  1017.  move.l a0,waterpt
  1018.  
  1019.  add.w #640,wtan
  1020.  and.w #8191,wtan
  1021.  add.w #1,wateroff
  1022.  and.w #63,wateroff
  1023.  
  1024.  
  1025.  move.l GunData,a6
  1026.  moveq #0,d0
  1027.  move.b GunSelected,d0
  1028.  add.w d0,d0
  1029.  lea (a6,d0.w*8),a6
  1030.  move.w (a6),Ammo
  1031.  
  1032.  cmp.b #'s',mors
  1033.  beq ASlaveShouldWaitOnHisMaster
  1034.  
  1035.  cmp.b #'n',mors
  1036.  bne NotOnePlayer
  1037.  
  1038.  move.w PLR1_energy,Energy
  1039.  move.w FramesToDraw,TempFrames
  1040.  move.w #0,FramesToDraw
  1041.  
  1042.  move.l PLR1s_xoff,p1_xoff
  1043.  move.l PLR1s_zoff,p1_zoff
  1044.  move.l PLR1s_yoff,p1_yoff
  1045.  move.l PLR1s_height,p1_height
  1046.  move.w PLR1s_angpos,p1_angpos
  1047.  move.w PLR1_bobble,p1_bobble
  1048.  move.b PLR1_clicked,p1_clicked
  1049.  move.b PLR1_fire,p1_fire
  1050.  clr.b PLR1_clicked
  1051.  move.b PLR1_SPCTAP,p1_spctap
  1052.  clr.b PLR1_SPCTAP
  1053.  move.b PLR1_Ducked,p1_ducked
  1054.  move.b PLR1_GunSelected,p1_gunselected
  1055.  
  1056.  bsr PLR1_Control
  1057.  
  1058.  move.l PLR1_Roompt,a0
  1059.  move.l ToZoneRoof(a0),SplitHeight
  1060.  move.w p1_xoff,THISPLRxoff
  1061.  move.w p1_zoff,THISPLRzoff
  1062.  
  1063.  bra donetalking
  1064.  
  1065. NotOnePlayer:
  1066.  
  1067.  move.w PLR1_energy,Energy
  1068.  
  1069.  
  1070.  jsr INITSEND
  1071.  jsr SENDLONG
  1072.  move.w FramesToDraw,TempFrames
  1073.  move.w #0,FramesToDraw
  1074.  
  1075.  move.l PLR1s_xoff,p1_xoff
  1076.  move.l PLR1s_zoff,p1_zoff
  1077.  move.l PLR1s_yoff,p1_yoff
  1078.  move.l PLR1s_height,p1_height
  1079.  move.w PLR1s_angpos,p1_angpos
  1080.  move.w PLR1_bobble,p1_bobble
  1081.  move.b PLR1_clicked,p1_clicked
  1082.  clr.b PLR1_clicked
  1083.  move.b PLR1_fire,p1_fire
  1084.  move.b PLR1_SPCTAP,p1_spctap
  1085.  clr.b PLR1_SPCTAP
  1086.  move.b PLR1_Ducked,p1_ducked
  1087.  move.b PLR1_GunSelected,p1_gunselected
  1088.  
  1089.  move.l p1_xoff,d0
  1090.  jsr SENDLONG
  1091.  move.l p1_zoff,d0
  1092.  jsr SENDLONG
  1093.  move.l p1_yoff,d0
  1094.  jsr SENDLONG
  1095.  move.l p1_height,d0
  1096.  jsr SENDLONG
  1097.  move.w p1_angpos,d0
  1098.  swap d0
  1099.  move.w p1_bobble,d0
  1100.  jsr SENDLONG
  1101.  move.w TempFrames,d0
  1102.  swap d0
  1103.  move.b p1_spctap,d0
  1104.  lsl.w #8,d0
  1105.  move.b p1_clicked,d0
  1106.  jsr SENDLONG
  1107.  move.w Rand1,d0
  1108.  swap d0
  1109.  move.b p1_ducked,d0
  1110.  lsl.w #8,d0
  1111.  move.b p1_gunselected,d0
  1112.  jsr SENDLONG
  1113.  move.b p1_fire,d0
  1114.  jsr SENDLAST
  1115.  
  1116.  jsr INITREC
  1117.  jsr RECEIVE
  1118.  
  1119.  move.l BUFFER,p2_xoff
  1120.  move.l BUFFER+4,p2_zoff
  1121.  move.l BUFFER+8,p2_yoff
  1122.  move.l BUFFER+12,p2_height
  1123.  move.w BUFFER+16,p2_angpos
  1124.  move.w BUFFER+18,p2_bobble
  1125.  move.b BUFFER+22,p2_spctap
  1126.  move.b BUFFER+23,p2_clicked
  1127.  move.b BUFFER+26,p2_ducked
  1128.  move.b BUFFER+27,p2_gunselected
  1129.  move.b BUFFER+31,p2_fire
  1130.  
  1131.  bsr PLR2_Control
  1132.  bsr PLR1_Control
  1133.  move.l PLR1_Roompt,a0
  1134.  move.l ToZoneRoof(a0),SplitHeight
  1135.  move.w p1_xoff,THISPLRxoff
  1136.  move.w p1_zoff,THISPLRzoff
  1137.  
  1138.  bra donetalking
  1139.  
  1140. ASlaveShouldWaitOnHisMaster:
  1141.  
  1142.  move.w PLR2_energy,Energy
  1143.  
  1144.  jsr INITREC
  1145.  jsr RECEIVE
  1146.  
  1147.  move.l PLR2s_xoff,p2_xoff
  1148.  move.l PLR2s_zoff,p2_zoff
  1149.  move.l PLR2s_yoff,p2_yoff
  1150.  move.l PLR2s_height,p2_height
  1151.  move.w PLR2s_angpos,p2_angpos
  1152.  move.w PLR2_bobble,p2_bobble
  1153.  move.b PLR2_clicked,p2_clicked
  1154.  clr.b PLR2_clicked
  1155.  move.b PLR2_fire,p2_fire
  1156.  move.b PLR2_SPCTAP,p2_spctap
  1157.  clr.b PLR2_SPCTAP
  1158.  move.b PLR2_Ducked,p2_ducked
  1159.  move.b PLR2_GunSelected,p2_gunselected
  1160.  
  1161.  jsr INITSEND
  1162.  move.l p2_xoff,d0
  1163.  jsr SENDLONG
  1164.  move.l p2_zoff,d0
  1165.  jsr SENDLONG
  1166.  move.l p2_yoff,d0
  1167.  jsr SENDLONG
  1168.  move.l p2_height,d0
  1169.  jsr SENDLONG
  1170.  move.w p2_angpos,d0
  1171.  swap d0
  1172.  move.w p2_bobble,d0
  1173.  jsr SENDLONG 
  1174.  move.b p2_spctap,d0
  1175.  lsl.w #8,d0
  1176.  move.b p2_clicked,d0
  1177.  jsr SENDLONG
  1178.  move.b p2_ducked,d0
  1179.  lsl.w #8,d0
  1180.  move.b p2_gunselected,d0
  1181.  jsr SENDLONG
  1182.  move.b p2_fire,d0
  1183.  jsr SENDLAST
  1184.  
  1185.  move.l BUFFER+4,p1_xoff
  1186.  move.l BUFFER+4+4,p1_zoff
  1187.  move.l BUFFER+4+8,p1_yoff
  1188.  move.l BUFFER+4+12,p1_height
  1189.  move.w BUFFER+4+16,p1_angpos
  1190.  move.w BUFFER+4+18,p1_bobble
  1191.  move.w BUFFER+4+20,TempFrames
  1192.  move.b BUFFER+4+22,p1_spctap
  1193.  move.b BUFFER+4+23,p1_clicked
  1194.  move.b BUFFER+4+26,p1_ducked
  1195.  move.b BUFFER+4+27,p1_gunselected
  1196.  move.w BUFFER+4+24,Rand1
  1197.  move.b BUFFER+4+31,p1_fire
  1198.  
  1199.  bsr PLR1_Control
  1200.  bsr PLR2_Control
  1201.  move.w p2_xoff,THISPLRxoff
  1202.  move.w p2_zoff,THISPLRzoff
  1203.  move.l PLR2_Roompt,a0
  1204.  move.l ToZoneRoof(a0),SplitHeight
  1205.  
  1206. donetalking:
  1207.  
  1208.  move.l #ZoneBrightTable,a1
  1209.  move.l ZoneAdds,a2
  1210.  move.l PLR2_ListOfGraphRooms,a0
  1211.  move.l PLR2_PointsToRotatePtr,a5
  1212.  cmp.b #'s',mors
  1213.  beq.s doallz
  1214.  move.l PLR1_ListOfGraphRooms,a0
  1215.  move.l PLR1_PointsToRotatePtr,a5
  1216.  
  1217. doallz
  1218.  move.w (a0),d0
  1219.  blt.s doneallz
  1220.  add.w #8,a0
  1221.  
  1222.  move.l (a2,d0.w*4),a3
  1223.  add.l #LEVELDATA,a3
  1224.  move.w ToZoneBrightness(a3),d2
  1225.  
  1226.  blt.s justbright
  1227.  move.w d2,d3
  1228.  lsr.w #8,d3
  1229.  tst.b d3
  1230.  beq.s justbright
  1231.  
  1232.  move.l #BrightAnimTable,a4
  1233.  move.w -2(a4,d3.w*2),d2
  1234.  
  1235. justbright:
  1236.  move.w d2,(a1,d0.w*4)
  1237.  
  1238.  move.w ToUpperBrightness(a3),d2
  1239.  
  1240.  blt.s justbright2
  1241.  move.w d2,d3
  1242.  lsr.w #8,d3
  1243.  tst.b d3
  1244.  beq.s justbright2
  1245.  
  1246.  move.l #BrightAnimTable,a4
  1247.  move.w -2(a4,d3.w*2),d2
  1248.  
  1249. justbright2:
  1250.  move.w d2,2(a1,d0.w*4)
  1251.  
  1252.  bra doallz
  1253.  
  1254. doneallz:
  1255.  
  1256.  
  1257.  move.l PointBrights,a2
  1258.  move.l #CurrentPointBrights,a3
  1259. justtheone:
  1260.  move.w (a5)+,d0
  1261.  blt.s whythehell
  1262.  move.w (a2,d0.w*2),d2
  1263.  
  1264.  tst.b d2
  1265.  blt.s .justbright
  1266.  move.w d2,d3
  1267.  lsr.w #8,d3
  1268.  tst.b d3
  1269.  beq.s .justbright
  1270.  
  1271.  move.w d3,d4
  1272.  and.w #$f,d3
  1273.  lsr.w #4,d4
  1274.  add.w #1,d4
  1275.  
  1276.  move.l #BrightAnimTable,a0
  1277.  move.w -2(a0,d3.w*2),d3
  1278.  ext.w d2
  1279.  sub.w d2,d3
  1280.  muls d4,d3
  1281.  asr.w #4,d3
  1282.  add.w d3,d2
  1283.  
  1284. .justbright:
  1285.  ext.w d2
  1286.  
  1287.  move.w d2,(a3,d0.w*2)
  1288.  
  1289.  bra.s justtheone
  1290.  
  1291. whythehell:
  1292.  
  1293.  move.l PLR1_Obj,a0
  1294.  move.b #5,16(a0)
  1295.  move.l PLR2_Obj,a0
  1296.  move.b #11,16(a0)
  1297.  
  1298. ******************************************
  1299.  jsr objmoveanim
  1300.  bsr EnergyBar
  1301.  bsr AmmoBar
  1302. ******************************************
  1303.  
  1304.  
  1305.  cmp.b #'s',mors
  1306.  beq.s ImPlayer2OhYesIAm
  1307.  bsr USEPLR1
  1308.  bra IWasPlayer1
  1309.  
  1310. ImPlayer2OhYesIAm:
  1311.  bsr USEPLR2
  1312. IWasPlayer1:
  1313.  
  1314.  
  1315.  cmp.b #'s',mors
  1316.  beq drawplayer2
  1317.  
  1318.  
  1319.  move.w #0,scaleval
  1320.  move.l PLR1_xoff,xoff
  1321.  move.l PLR1_yoff,yoff
  1322.  move.l PLR1_zoff,zoff
  1323.  move.w PLR1_angpos,angpos
  1324.  move.w PLR1_cosval,cosval
  1325.  move.w PLR1_sinval,sinval
  1326.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  1327.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  1328.  move.l PLR1_Roompt,Roompt
  1329.  
  1330.  move.w #0,leftclip
  1331.  move.w #96,rightclip
  1332.  move.w #0,deftopclip
  1333.  move.w #79,defbotclip
  1334.  move.w #0,topclip
  1335.  move.w #79,botclip
  1336. ; sub.l #10*104*4,frompt
  1337. ; sub.l #10*104*4,midpt
  1338.  
  1339. * Subroom loop
  1340.  
  1341.  bsr DrawDisplay 
  1342.  
  1343.  
  1344.  
  1345.  bra nodrawp2
  1346.  
  1347. drawplayer2
  1348.  
  1349.  move.w #0,scaleval
  1350.  move.l PLR2_xoff,xoff
  1351.  move.l PLR2_yoff,yoff
  1352.  move.l PLR2_zoff,zoff
  1353.  move.w PLR2_angpos,angpos
  1354.  move.w PLR2_cosval,cosval
  1355.  move.w PLR2_sinval,sinval
  1356.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  1357.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  1358.  move.l PLR2_Roompt,Roompt
  1359.  
  1360.  move.w #0,leftclip
  1361.  move.w #96,rightclip
  1362.  move.w #0,deftopclip
  1363.  move.w #79,defbotclip
  1364.  move.w #0,topclip
  1365.  move.w #79,botclip
  1366.  
  1367.  bsr DrawDisplay
  1368.  
  1369. nodrawp2:
  1370.  
  1371.  move.l PLR2_Roompt,a0
  1372.  move.l #WorkSpace,a1
  1373.  clr.l (a1)
  1374.  clr.l 4(a1)
  1375.  clr.l 8(a1)
  1376.  clr.l 12(a1)
  1377.  clr.l 16(a1)
  1378.  clr.l 20(a1)
  1379.  clr.l 24(a1)
  1380.  clr.l 28(a1)
  1381.  
  1382.  cmp.b #'n',mors
  1383.  beq.s plr1only
  1384.  
  1385.  lea ToListOfGraph(a0),a0
  1386. .doallrooms:
  1387.  move.w (a0),d0
  1388.  blt.s .allroomsdone
  1389.  addq #8,a0
  1390.  move.w d0,d1
  1391.  asr.w #3,d0
  1392.  bset d1,(a1,d0.w)
  1393.  bra .doallrooms
  1394. .allroomsdone:
  1395.  
  1396. plr1only:
  1397.  
  1398.  move.l PLR1_Roompt,a0
  1399.  lea ToListOfGraph(a0),a0
  1400. .doallrooms2:
  1401.  move.w (a0),d0
  1402.  blt.s .allroomsdone2
  1403.  addq #8,a0
  1404.  move.w d0,d1
  1405.  asr.w #3,d0
  1406.  bset d1,(a1,d0.w)
  1407.  bra .doallrooms2
  1408. .allroomsdone2:
  1409.  
  1410.  move.l ObjectData,a0
  1411.  sub.w #64,a0
  1412. .doallobs:
  1413.  add.w #64,a0
  1414.  move.w (a0),d0
  1415.  blt.s .allobsdone
  1416.  move.w 12(a0),d0
  1417.  blt.s .doallobs
  1418.  move.w d0,d1
  1419.  asr.w #3,d0
  1420.  btst d1,(a1,d0.w)
  1421.  beq.s .doallobs
  1422.  st worry(a0)
  1423.  bra.s .doallobs
  1424. .allobsdone:
  1425.  
  1426.  
  1427.  
  1428. ; move.l #brightentab,a0
  1429. ; move.l frompt,a3
  1430. ; adda.w #(4*33)+(104*4*20),a3
  1431. ; move.w #20,d7
  1432. ; move.w #20,d6
  1433. ;horl:
  1434. ; move.w d6,d5
  1435. ; move.l a3,a1
  1436. ;vertl
  1437. ; move.w (a1),d0
  1438. ; move.w (a0,d0.w*2),(a1)
  1439. ; addq #4,a1
  1440. ; dbra d5,vertl
  1441. ; adda.w #104*4,a3
  1442. ; dbra d7,horl
  1443.  
  1444.  move.l #$dff000,a6
  1445.  
  1446. ; move.w #$300,col0(a6)
  1447.  
  1448.  move.l #KeyMap,a5
  1449.  tst.b $45(a5)
  1450.  beq.s noend
  1451.  
  1452.  bra endnomusic
  1453. noend:
  1454.  
  1455.  tst.w Energy
  1456.  bgt .noend
  1457.  cmp.b #'i',option+4
  1458.  bne end
  1459.  move.w #10,Energy
  1460. .noend:
  1461.  
  1462.  move.l SwitchData,a0
  1463.  tst.b 24+8(a0)
  1464.  bne end
  1465.   
  1466.  JSR STOPTIMER
  1467.  
  1468.  bra lop
  1469.  
  1470. ***************************************************************************
  1471. ***************************************************************************
  1472. ****************** End of Main Loop here ********************************** 
  1473. ***************************************************************************
  1474. ***************************************************************************
  1475.  
  1476. READCONTROLS: dc.w 0
  1477.  
  1478. USEPLR1:
  1479.  
  1480. ***********************************
  1481.  
  1482.  move.l PLR1_Obj,a0 
  1483.  move.l ObjectPoints,a1
  1484.  move.l #ObjRotated,a2
  1485.  move.w (a0),d0
  1486.  move.l PLR1_xoff,(a1,d0.w*8)
  1487.  move.l PLR1_zoff,4(a1,d0.w*8)
  1488.  move.l PLR1_Roompt,a1
  1489.  
  1490.  move.b damagetaken(a0),d2
  1491.  beq .notbeenshot
  1492.  move.w #$f00,hitcol
  1493.  move.w #$f00,hitcol2
  1494.  ext.w d2
  1495.  sub.w d2,PLR1_energy
  1496.  movem.l d0-d7/a0-a6,-(a7)
  1497.  move.w #19,Samplenum
  1498.  clr.b notifplaying
  1499.  move.w #0,Noisex
  1500.  move.w #0,Noisez
  1501.  move.w #100,Noisevol
  1502.  jsr MakeSomeNoise
  1503.  
  1504.  movem.l (a7)+,d0-d7/a0-a6
  1505.  
  1506. .notbeenshot
  1507.  move.b #0,damagetaken(a0)
  1508.  move.b PLR1_energy+1,numlives(a0)
  1509.  
  1510.  move.b PLR1_StoodInTop,ObjInTop(a0)
  1511.  
  1512.  move.w (a1),12(a0)
  1513.  move.w (a1),d2
  1514.  move.l #ZoneBrightTable,a1
  1515.  move.l (a1,d2.w*4),d2
  1516.  tst.b PLR1_StoodInTop
  1517.  bne.s .okinbott
  1518.  swap d2
  1519. .okinbott:
  1520.  
  1521.  move.w d2,2(a0)
  1522.  
  1523.  move.l PLR1_yoff,d0
  1524.  move.l PLR1_height,d1
  1525.  asr.l #1,d1
  1526.  add.l d1,d0
  1527.  asr.l #7,d0
  1528.  move.w d0,4(a0)
  1529.  
  1530. ***********************************
  1531.  
  1532.  move.l PLR2_Obj,a0 
  1533.  
  1534.  move.w PLR2_angpos,d0
  1535.  and.w #8190,d0
  1536.  move.w d0,Facing(a0)
  1537.  
  1538.  jsr ViewpointToDraw
  1539.  asl.w #2,d0
  1540.  moveq #0,d1
  1541.  move.b p2_bobble,d1
  1542.  not.b d1
  1543.  lsr.b #3,d1
  1544.  and.b #$3,d1
  1545.  add.w d1,d0
  1546.  move.w d0,10(a0)
  1547.  move.w #10,8(a0)
  1548.  
  1549.  move.l ObjectPoints,a1
  1550.  move.l #ObjRotated,a2
  1551.  move.w (a0),d0
  1552.  move.l PLR2_xoff,(a1,d0.w*8)
  1553.  move.l PLR2_zoff,4(a1,d0.w*8)
  1554.  move.l PLR2_Roompt,a1
  1555.  
  1556.  move.b damagetaken(a0),d2
  1557.  beq .notbeenshot2
  1558.  ext.w d2
  1559.  sub.w d2,PLR2_energy
  1560. .notbeenshot2
  1561.  move.b #0,damagetaken(a0)
  1562.  move.b PLR2_energy+1,numlives(a0)
  1563.  
  1564.  move.b PLR2_StoodInTop,ObjInTop(a0)
  1565.  
  1566.  move.w (a1),12(a0)
  1567.  move.w (a1),d2
  1568.  move.l #ZoneBrightTable,a1
  1569.  move.l (a1,d2.w*4),d2
  1570.  tst.b PLR2_StoodInTop
  1571.  bne.s .okinbott2
  1572.  swap d2
  1573. .okinbott2:
  1574.  
  1575.  move.w d2,2(a0)
  1576.  
  1577.  move.l PLR2_yoff,d0
  1578.  move.l PLR2_height,d1
  1579.  asr.l #1,d1
  1580.  add.l d1,d0
  1581.  asr.l #7,d0
  1582.  move.w d0,4(a0)
  1583.  
  1584. **********************************
  1585.  
  1586.  move.l PLR1_Obj,a0
  1587.  move.w PLR1_sinval,d4
  1588.  muls #100,d4
  1589.  move.w PLR1_cosval,d5
  1590.  muls #100,d5
  1591.  
  1592.  move.b PLR1_GunSelected,d0
  1593.  asl.b #2,d0
  1594.  add.b PLR1_GunFrame,d0
  1595.  move.b d0,11+128(a0)
  1596.  
  1597.  tst.b PLR1_GunFrame
  1598.  beq.s .noless
  1599.  subq.b #1,PLR1_GunFrame
  1600. .noless: 
  1601.  
  1602.  move.l ObjectPoints,a1
  1603.  move.w 128(a0),d0
  1604.  move.l PLR1_xoff,d1
  1605.  add.l d4,d1
  1606.  move.l d1,(a1,d0.w*8)
  1607.  move.l PLR1_zoff,d1
  1608.  add.l d5,d1
  1609.  move.l d1,4(a1,d0.w*8)
  1610.  move.w 4(a0),d0
  1611.  move.l PLR1_height,d1
  1612.  asr.l #8,d1
  1613.  sub.w d1,d0
  1614.  
  1615.  add.w #16,d0
  1616.  move.w d0,4+128(a0)
  1617.  move.w #$2010,6+128(a0)
  1618.  
  1619.  move.w 12(a0),12+128(a0)
  1620.  
  1621.  move.w 2(a0),2+128(a0)
  1622.  
  1623.  rts
  1624.  
  1625. ***************************************************
  1626. **************************************************
  1627.  
  1628. USEPLR2:
  1629.  
  1630. ***********************************
  1631.  
  1632.  move.l PLR2_Obj,a0 
  1633.  move.l ObjectPoints,a1
  1634.  move.l #ObjRotated,a2
  1635.  move.w (a0),d0
  1636.  move.l PLR2_xoff,(a1,d0.w*8)
  1637.  move.l PLR2_zoff,4(a1,d0.w*8)
  1638.  move.l PLR2_Roompt,a1
  1639.  
  1640.  move.b damagetaken(a0),d2
  1641.  beq .notbeenshot
  1642.  move.w #$f00,hitcol
  1643.  move.w #$f00,hitcol2
  1644.  ext.w d2
  1645.  sub.w d2,PLR2_energy
  1646.  movem.l d0-d7/a0-a6,-(a7)
  1647.  move.w #19,Samplenum
  1648.  clr.b notifplaying
  1649.  move.w #0,Noisex
  1650.  move.w #0,Noisez
  1651.  move.w #100,Noisevol
  1652.  jsr MakeSomeNoise
  1653.  
  1654.  movem.l (a7)+,d0-d7/a0-a6
  1655.  
  1656. .notbeenshot
  1657.  move.b #0,damagetaken(a0)
  1658.  move.b PLR2_energy+1,numlives(a0)
  1659.  
  1660.  move.b PLR2_StoodInTop,ObjInTop(a0)
  1661.  
  1662.  move.w (a1),12(a0)
  1663.  move.w (a1),d2
  1664.  move.l #ZoneBrightTable,a1
  1665.  move.l (a1,d2.w*4),d2
  1666.  tst.b PLR1_StoodInTop
  1667.  bne.s .okinbott
  1668.  swap d2
  1669. .okinbott:
  1670.  
  1671.  move.w d2,2(a0)
  1672.  
  1673.  move.l PLR2_yoff,d0
  1674.  move.l PLR2_height,d1
  1675.  asr.l #1,d1
  1676.  add.l d1,d0
  1677.  asr.l #7,d0
  1678.  move.w d0,4(a0)
  1679.  
  1680. ***********************************
  1681.  
  1682.  move.l PLR1_Obj,a0 
  1683.  
  1684.  move.w PLR1_angpos,d0
  1685.  and.w #8190,d0
  1686.  move.w d0,Facing(a0)
  1687.  
  1688.  jsr ViewpointToDraw
  1689.  asl.w #2,d0
  1690.  moveq #0,d1
  1691.  move.b p1_bobble,d1
  1692.  not.b d1
  1693.  lsr.b #3,d1
  1694.  and.b #$3,d1
  1695.  add.w d1,d0
  1696.  move.w d0,10(a0)
  1697.  move.w #10,8(a0)
  1698.  
  1699.  
  1700.  move.l ObjectPoints,a1
  1701.  move.l #ObjRotated,a2
  1702.  move.w (a0),d0
  1703.  move.l PLR1_xoff,(a1,d0.w*8)
  1704.  move.l PLR1_zoff,4(a1,d0.w*8)
  1705.  move.l PLR1_Roompt,a1
  1706.  
  1707.  move.b damagetaken(a0),d2
  1708.  beq .notbeenshot2
  1709.  ext.w d2
  1710.  sub.w d2,PLR1_energy
  1711. .notbeenshot2
  1712.  move.b #0,damagetaken(a0)
  1713.  move.b PLR1_energy+1,numlives(a0)
  1714.  
  1715.  move.b PLR1_StoodInTop,ObjInTop(a0)
  1716.  
  1717.  move.w (a1),12(a0)
  1718.  move.w (a1),d2
  1719.  move.l #ZoneBrightTable,a1
  1720.  move.l (a1,d2.w*4),d2
  1721.  tst.b PLR1_StoodInTop
  1722.  bne.s .okinbott2
  1723.  swap d2
  1724. .okinbott2:
  1725.  
  1726.  move.w d2,2(a0)
  1727.  
  1728.  move.l PLR1_yoff,d0
  1729.  move.l PLR1_height,d1
  1730.  asr.l #1,d1
  1731.  add.l d1,d0
  1732.  asr.l #7,d0
  1733.  move.w d0,4(a0)
  1734.  
  1735. **********************************
  1736.  
  1737.  move.l PLR2_Obj,a0
  1738.  move.w PLR2_sinval,d4
  1739.  muls #100,d4
  1740.  move.w PLR2_cosval,d5
  1741.  muls #100,d5
  1742.  
  1743.  move.b PLR2_GunSelected,d0
  1744.  asl.b #2,d0
  1745.  add.b PLR2_GunFrame,d0
  1746.  move.b d0,11+64(a0)
  1747.  
  1748.  tst.b PLR2_GunFrame
  1749.  beq.s .noless
  1750.  subq.b #1,PLR2_GunFrame
  1751. .noless: 
  1752.  
  1753.  move.l ObjectPoints,a1
  1754.  move.w 64(a0),d0
  1755.  move.l PLR2_xoff,d1
  1756.  add.l d4,d1
  1757.  move.l d1,(a1,d0.w*8)
  1758.  move.l PLR2_zoff,d1
  1759.  add.l d5,d1
  1760.  move.l d1,4(a1,d0.w*8)
  1761.  move.w 4(a0),d0
  1762.  move.l PLR2_height,d1
  1763.  asr.l #8,d1
  1764.  sub.w d1,d0
  1765.  add.w #16,d0
  1766.  move.w d0,4+64(a0)
  1767.  move.w #$2010,6+64(a0)
  1768.  
  1769.  move.w 12(a0),12+64(a0)
  1770.  
  1771.  move.w 2(a0),2+64(a0)
  1772.  
  1773.  rts
  1774.  
  1775.  
  1776. GunSelected: dc.b 0
  1777.  even
  1778.  
  1779. GunData: dc.l 0
  1780.  
  1781. PLR1_GunData:
  1782. ; 0=Pistol 1=Big Gun
  1783. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  1784.  
  1785. ; VISIBLE/INSTANT (0/FF)
  1786. ; damage,gotgun(b)
  1787. ; Delay (w), Lifetime of bullet (w)
  1788. ; Click or hold down (0,1)
  1789.  
  1790.  dc.w 0
  1791.  dc.b 1,3
  1792.  dc.b 20
  1793.  dc.b -1
  1794.  dc.b 1,$ff
  1795.  dc.w 5,-1,0,0
  1796.  
  1797.  dc.w 0
  1798.  dc.b 1,1
  1799.  dc.b 40
  1800.  dc.b 0
  1801.  dc.b 4,0
  1802.  dc.w 10,-1,0,0
  1803.  
  1804.  dc.w 0
  1805.  dc.b 1,9
  1806.  dc.b 5
  1807.  dc.b 0
  1808.  dc.b 10,0
  1809.  dc.w 50,-1,0,0
  1810.  
  1811.  dc.w 40
  1812.  dc.b 1,3
  1813.  dc.b 40
  1814.  dc.b 0
  1815.  dc.b 4,$FF
  1816.  dc.w 0,10,1,0
  1817.  
  1818. PLR2_GunData:
  1819. ; 0=Pistol 1=Big Gun
  1820. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  1821.  
  1822. ; VISIBLE/INSTANT (0/FF)
  1823. ; damage,gotgun(b)
  1824. ; Delay (w)
  1825.  
  1826.  dc.w 0
  1827.  dc.b 1,3
  1828.  dc.b 20
  1829.  dc.b -1
  1830.  dc.b 1,$ff
  1831.  dc.w 5,0,0,0
  1832.  
  1833.  dc.w 0
  1834.  dc.b 1,1
  1835.  dc.b 40
  1836.  dc.b 0
  1837.  dc.b 4,0
  1838.  dc.w 10,0,0,0
  1839.  
  1840.  dc.w 0
  1841.  dc.b 1,9
  1842.  dc.b 5
  1843.  dc.b 0
  1844.  dc.b 10,0
  1845.  dc.w 50,0,0,0
  1846.  
  1847. protA: dc.w 0
  1848.  
  1849. Path:
  1850. ; incbin "testpath"
  1851. endpath:
  1852. pathpt: dc.l Path
  1853.  
  1854.  
  1855. PLR1KEYS: dc.b 0
  1856. PLR1PATH: dc.b 0
  1857. PLR1MOUSE: dc.b -1
  1858. PLR1JOY: dc.b 0
  1859. PLR2KEYS: dc.b 0
  1860. PLR2PATH: dc.b 0
  1861. PLR2MOUSE: dc.b -1
  1862. PLR2JOY: dc.b 0
  1863.  
  1864.  even
  1865.  
  1866. PLR1_bobble: dc.w 0
  1867. PLR2_bobble: dc.w 0
  1868. xwobble: dc.l 0
  1869. xwobxoff: dc.w 0
  1870. xwobzoff: dc.w 0
  1871.  
  1872. PLR1_Control:
  1873.  
  1874. ; Take a snapshot of everything.
  1875.  
  1876.  move.l PLR1_xoff,d2
  1877.  move.l d2,PLR1_oldxoff
  1878.  move.l d2,oldx
  1879.  move.l PLR1_zoff,d3
  1880.  move.l d3,PLR1_oldzoff
  1881.  move.l d3,oldz
  1882.  move.l p1_xoff,d0
  1883.  move.l d0,PLR1_xoff
  1884.  move.l d0,newx
  1885.  move.l p1_zoff,d1
  1886.  move.l d1,newz
  1887.  move.l d1,PLR1_zoff
  1888.  
  1889.  move.l p1_height,PLR1_height
  1890.  
  1891.  sub.l d2,d0
  1892.  sub.l d3,d1
  1893.  move.l d0,xdiff
  1894.  move.l d1,zdiff
  1895.  move.w p1_angpos,d0
  1896.  move.w d0,PLR1_angpos
  1897.  
  1898.  move.l #SineTable,a1
  1899.  move.w (a1,d0.w),PLR1_sinval
  1900.  add.w #2048,d0
  1901.  and.w #8190,d0
  1902.  move.w (a1,d0.w),PLR1_cosval
  1903.  
  1904.  move.l p1_yoff,d0
  1905.  move.w p1_bobble,d1
  1906.  move.w (a1,d1.w),d1
  1907.  move.w d1,d3
  1908.  ble.s notnegative
  1909.  neg.w d1
  1910. notnegative:
  1911.  add.w #16384,d1
  1912.  asr.w #5,d1
  1913.  add.w d1,d1
  1914.  ext.l d1
  1915.  add.l d1,d0
  1916.  
  1917.  asr.w #6,d3
  1918.  ext.l d3
  1919.  move.l d3,xwobble
  1920.  move.w PLR1_sinval,d1
  1921.  muls d3,d1
  1922.  move.w PLR1_cosval,d2
  1923.  muls d3,d2
  1924.  swap d1
  1925.  swap d2
  1926.  asr.w #7,d1
  1927.  move.w d1,xwobxoff
  1928.  asr.w #7,d2
  1929.  neg.w d2
  1930.  move.w d2,xwobzoff
  1931.  
  1932.  
  1933.  move.l d0,PLR1_yoff
  1934.  move.l d0,newy
  1935.  move.l d0,oldy
  1936.  move.l PLR1_height,thingheight
  1937.  
  1938.  move.l #40*256,StepUpVal
  1939.  tst.b PLR1_Ducked
  1940.  beq.s .okbigstep
  1941.  move.l #10*256,StepUpVal
  1942. .okbigstep:
  1943.  
  1944.  move.l #$1000000,StepDownVal
  1945.  
  1946.  move.l PLR1_Roompt,objroom
  1947.  move.w #%100000000,wallflags
  1948.  move.b PLR1_StoodInTop,StoodInTop
  1949.  
  1950.  move.w #%110111000001,CollideFlags
  1951.  
  1952.  bsr Collision
  1953.  tst.b hitwall
  1954.  beq.s .nothitanything
  1955.  move.w oldx,PLR1_xoff
  1956.  move.w oldz,PLR1_zoff
  1957.  move.l PLR1_xoff,PLR1s_xoff
  1958.  move.l PLR1_zoff,PLR1s_zoff
  1959.  bra .cantmove
  1960.  
  1961. .nothitanything:
  1962.  
  1963.  bsr MoveObject
  1964.  move.b StoodInTop,PLR1_StoodInTop
  1965.  move.l objroom,PLR1_Roompt
  1966.  move.w newx,PLR1_xoff
  1967.  move.w newz,PLR1_zoff
  1968.  move.l PLR1_xoff,PLR1s_xoff
  1969.  move.l PLR1_zoff,PLR1s_zoff
  1970.  
  1971. .cantmove:
  1972.  
  1973.  move.l PLR1_Roompt,a0
  1974.  
  1975.  move.l ToZoneFloor(a0),d0
  1976.  tst.b PLR1_StoodInTop
  1977.  beq.s notintop
  1978.  move.l ToUpperFloor(a0),d0
  1979. notintop:
  1980.  
  1981.  adda.w #ToZonePts,a0
  1982.  sub.l PLR1_height,d0
  1983.  move.l d0,PLR1s_tyoff
  1984.  
  1985. ; move.l (a0),a0        ; jump to viewpoint list
  1986.  * A0 is pointing at a pointer to list of points to rotate
  1987.  move.w (a0)+,d1
  1988.  ext.l d1
  1989.  add.l PLR1_Roompt,d1
  1990.  move.l d1,PLR1_PointsToRotatePtr
  1991.  tst.w (a0)+
  1992.  beq.s nobackgraphics
  1993.  move.l a0,-(a7)
  1994.  jsr putinbackdrop 
  1995.  move.l (a7)+,a0
  1996. nobackgraphics:
  1997.  move.l a0,PLR1_ListOfGraphRooms
  1998.  
  1999. *****************************************************
  2000.  
  2001.  rts
  2002.  
  2003. PLR2_Control:
  2004.  
  2005. ; Take a snapshot of everything.
  2006.  
  2007.  move.l PLR2_xoff,d2
  2008.  move.l d2,PLR2_oldxoff
  2009.  move.l d2,oldx
  2010.  move.l PLR2_zoff,d3
  2011.  move.l d3,PLR2_oldzoff
  2012.  move.l d3,oldz
  2013.  move.l p2_xoff,d0
  2014.  move.l d0,PLR2_xoff
  2015.  move.l d0,newx
  2016.  move.l p2_zoff,d1
  2017.  move.l d1,newz
  2018.  move.l d1,PLR2_zoff
  2019.  
  2020.  move.l p2_height,PLR2_height
  2021.  
  2022.  sub.l d2,d0
  2023.  sub.l d3,d1
  2024.  move.l d0,xdiff
  2025.  move.l d1,zdiff
  2026.  move.w p2_angpos,d0
  2027.  move.w d0,PLR2_angpos
  2028.  
  2029.  move.l #SineTable,a1
  2030.  move.w (a1,d0.w),PLR2_sinval
  2031.  add.w #2048,d0
  2032.  and.w #8190,d0
  2033.  move.w (a1,d0.w),PLR2_cosval
  2034.  
  2035.  move.l p2_yoff,d0
  2036.  move.w p2_bobble,d1
  2037.  move.w (a1,d1.w),d1
  2038.  move.w d1,d3
  2039.  ble.s .notnegative
  2040.  neg.w d1
  2041. .notnegative:
  2042.  add.w #16384,d1
  2043.  asr.w #5,d1
  2044.  add.w d1,d1
  2045.  ext.l d1
  2046.  add.l d1,d0
  2047.  
  2048.  asr.w #6,d3
  2049.  ext.l d3
  2050.  move.l d3,xwobble
  2051.  move.w PLR2_sinval,d1
  2052.  muls d3,d1
  2053.  move.w PLR2_cosval,d2
  2054.  muls d3,d2
  2055.  swap d1
  2056.  swap d2
  2057.  asr.w #7,d1
  2058.  move.w d1,xwobxoff
  2059.  asr.w #7,d2
  2060.  neg.w d2
  2061.  move.w d2,xwobzoff
  2062.  
  2063.  
  2064.  move.l d0,PLR2_yoff
  2065.  move.l d0,newy
  2066.  move.l d0,oldy
  2067.  move.l PLR2_height,thingheight
  2068.  move.l #40*256,StepUpVal
  2069.  tst.b PLR2_Ducked
  2070.  beq.s .okbigstep
  2071.  move.l #10*256,StepUpVal
  2072. .okbigstep:
  2073.  
  2074.  
  2075.  move.l #$1000000,StepDownVal
  2076.  
  2077.  move.l PLR2_Roompt,objroom
  2078.  move.w #%100000000000,wallflags
  2079.  move.b PLR2_StoodInTop,StoodInTop
  2080.  
  2081.  move.w #%010111100001,CollideFlags
  2082.  
  2083.  bsr Collision
  2084.  tst.b hitwall
  2085.  beq.s .nothitanything
  2086.  move.w oldx,PLR2_xoff
  2087.  move.w oldz,PLR2_zoff
  2088.  move.l PLR2_xoff,PLR2s_xoff
  2089.  move.l PLR2_zoff,PLR2s_zoff
  2090.  bra .cantmove
  2091. .nothitanything:
  2092.  
  2093.  bsr MoveObject
  2094.  move.b StoodInTop,PLR2_StoodInTop
  2095.  move.w #0,wallflags
  2096.  move.l objroom,PLR2_Roompt
  2097.  move.w newx,PLR2_xoff
  2098.  move.w newz,PLR2_zoff
  2099.  move.l PLR2_xoff,PLR2s_xoff
  2100.  move.l PLR2_zoff,PLR2s_zoff
  2101.  
  2102. .cantmove
  2103.  
  2104.  move.l PLR2_Roompt,a0
  2105.  
  2106.  move.l ToZoneFloor(a0),d0
  2107.  tst.b PLR2_StoodInTop
  2108.  beq.s .notintop
  2109.  move.l ToUpperFloor(a0),d0
  2110. .notintop:
  2111.  
  2112.  
  2113.  adda.w #ToZonePts,a0
  2114.  sub.l PLR2_height,d0
  2115.  move.l d0,PLR2s_tyoff
  2116.  
  2117. ; move.l (a0),a0        ; jump to viewpoint list
  2118.  * A0 is pointing at a pointer to list of points to rotate
  2119.  move.w (a0)+,d1
  2120.  ext.l d1
  2121.  add.l PLR2_Roompt,d1
  2122.  move.l d1,PLR2_PointsToRotatePtr
  2123.  tst.w (a0)+
  2124.  beq.s .nobackgraphics
  2125.  move.l a0,-(a7)
  2126.  jsr putinbackdrop 
  2127.  move.l (a7)+,a0
  2128. .nobackgraphics:
  2129.  move.l a0,PLR2_ListOfGraphRooms
  2130.  
  2131. *****************************************************
  2132.  
  2133.  rts
  2134.  
  2135.  
  2136. KeyMap: ds.b 256
  2137.  
  2138.  
  2139. DrawDisplay:
  2140.  
  2141.  move.l #SineTable,a0
  2142.  move.w angpos,d0
  2143.  move.w (a0,d0.w),d6
  2144.  adda.w #2048,a0
  2145.  move.w (a0,d0.w),d7
  2146.  move.w d6,sinval
  2147.  move.w d7,cosval
  2148.  
  2149.  move.l yoff,d0
  2150.  asr.l #8,d0
  2151.  move.w d0,d1
  2152.  add.w #256-32,d1
  2153.  and.w #255,d1
  2154.  move.w d1,wallyoff
  2155.  asl.w #2,d0
  2156.  move.w d0,flooryoff
  2157.  
  2158.  move.w xoff,d6
  2159.  move.w d6,d3
  2160.  asr.w #1,d3
  2161.  add.w d3,d6
  2162.  asr.w #1,d6
  2163.  move.w d6,xoff34
  2164.  
  2165.  move.w zoff,d6
  2166.  move.w d6,d3
  2167.  asr.w #1,d3
  2168.  add.w d3,d6
  2169.  asr.w #1,d6
  2170.  move.w d6,zoff34
  2171.  
  2172.  bsr RotateLevelPts
  2173.  bsr RotateObjectPts
  2174.  bsr OrderZones
  2175.  bsr CalcPLR1InLine
  2176.  cmp.b #'n',mors
  2177.  bne.s doplr2too
  2178.  move.l PLR2_Obj,a0
  2179.  move.w #-1,12(a0)
  2180.  bra noplr2either
  2181.  
  2182. doplr2too:
  2183.  bsr CalcPLR2InLine
  2184. noplr2either:
  2185.  
  2186.  move.l ListOfGraphRooms,a0
  2187.  
  2188.  move.l endoflist,a0
  2189. subroomloop:
  2190.  move.w -(a0),d7
  2191.  blt jumpoutofrooms
  2192.  
  2193. ; bsr setlrclip
  2194. ; move.w leftclip,d0
  2195. ; cmp.w rightclip,d0
  2196. ; bge subroomloop
  2197.  move.l a0,-(a7)
  2198.  
  2199.  move.l ZoneAdds,a0
  2200.  move.l (a0,d7.w*4),a0
  2201.  add.l #LEVELDATA,a0
  2202.  move.l ToZoneRoof(a0),SplitHeight
  2203.  
  2204.  move.l ZoneGraphAdds,a0
  2205.  move.l 4(a0,d7.w*8),a2
  2206.  move.l (a0,d7.w*8),a0
  2207.  
  2208.  add.l #LEVELGRAPHICS,a0
  2209.  add.l #LEVELGRAPHICS,a2
  2210.  move.l a2,ThisRoomToDraw+4
  2211.  move.l a0,ThisRoomToDraw
  2212.  
  2213.  move.l ListOfGraphRooms,a1
  2214.  
  2215. finditit:
  2216.  tst.w (a1)
  2217.  blt nomoretodoatall
  2218.  cmp.w (a1),d7
  2219.  beq outoffind
  2220.  adda.w #8,a1
  2221.  bra finditit
  2222.  
  2223. outoffind:
  2224.  
  2225.  move.l a1,-(a7)
  2226.  
  2227.  move.w #0,leftclip
  2228.  move.w #96,rightclip
  2229.  moveq #0,d7
  2230.  move.w 2(a1),d7
  2231.  blt.s outofrcliplop
  2232.  move.l #LEVELCLIPS,a0
  2233.  lea (a0,d7.l*2),a0
  2234.  
  2235.  tst.w (a0)
  2236.  blt outoflcliplop
  2237.  
  2238.  bsr NEWsetlclip
  2239.  
  2240. intolcliplop:        ; clips
  2241.  tst.w (a0)
  2242.  blt outoflcliplop
  2243.  
  2244.  bsr NEWsetlclip 
  2245.  bra intolcliplop
  2246.  
  2247. outoflcliplop:
  2248.  
  2249.  addq #2,a0
  2250.  
  2251.  tst.w (a0)
  2252.  blt outofrcliplop
  2253.  
  2254.  bsr NEWsetrclip
  2255.  
  2256. intorcliplop:        ; clips
  2257.  tst.w (a0)
  2258.  blt outofrcliplop
  2259.  
  2260.  bsr NEWsetrclip 
  2261.  bra intorcliplop
  2262.  
  2263. outofrcliplop:
  2264.  
  2265.  move.w leftclip,d0
  2266.  cmp.w #95,d0
  2267.  bge dontbothercantseeit
  2268.  move.w rightclip,d1
  2269.  blt dontbothercantseeit
  2270.  cmp.w d1,d0
  2271.  bge dontbothercantseeit
  2272.  
  2273.  move.l yoff,d0
  2274.  cmp.l SplitHeight,d0
  2275.  blt.s botfirst
  2276.  
  2277.  move.l ThisRoomToDraw+4,a0
  2278.  cmp.l #LEVELGRAPHICS,a0
  2279.  beq.s noupperroom
  2280.  st DOUPPER
  2281.  bsr dothisroom
  2282. noupperroom:
  2283.  move.l ThisRoomToDraw,a0
  2284.  clr.b DOUPPER
  2285.  bsr dothisroom
  2286.  
  2287.  bra dontbothercantseeit
  2288. botfirst:
  2289.  
  2290.  move.l ThisRoomToDraw,a0
  2291.  clr.b DOUPPER
  2292.  bsr dothisroom
  2293.  move.l ThisRoomToDraw+4,a0
  2294.  cmp.l #LEVELGRAPHICS,a0
  2295.  beq.s noupperroom2
  2296.  st DOUPPER
  2297.  bsr dothisroom
  2298. noupperroom2:
  2299.  
  2300. dontbothercantseeit:
  2301. pastemp:
  2302.  
  2303.  move.l (a7)+,a1
  2304.  move.l ThisRoomToDraw,a0
  2305.  move.w (a0),d7
  2306.  adda.w #8,a1
  2307.  bra finditit
  2308.  
  2309. nomoretodoatall:
  2310.  
  2311.  move.l (a7)+,a0
  2312.  
  2313.  bra subroomloop
  2314.  
  2315. jumpoutofrooms:
  2316.  
  2317.  rts
  2318.  
  2319. prot9: dc.w 0
  2320.  
  2321. TempBuffer: ds.l 100 
  2322.  
  2323. ClipTable: ds.l 30
  2324. EndOfClipPt: dc.l 0
  2325. DOUPPER: dc.w 0
  2326.  
  2327. dothisroom
  2328.  
  2329.  move.w (a0)+,d0
  2330.  move.w d0,currzone
  2331.  move.l #ZoneBrightTable,a1
  2332.  move.l (a1,d0.w*4),d1
  2333.  tst.b DOUPPER
  2334.  bne.s .okbot
  2335.  swap d1
  2336. .okbot:
  2337.  move.w d1,ZoneBright
  2338.  
  2339. polyloop:
  2340.  move.w (a0)+,d0
  2341.  blt jumpoutofloop
  2342.  beq itsawall
  2343.  cmp.w #3,d0
  2344.  beq itsasetclip
  2345.  blt itsafloor
  2346.  cmp.w #4,d0
  2347.  beq itsanobject
  2348.  cmp.w #5,d0
  2349.  beq.s itsanarc
  2350.  cmp.w #6,d0
  2351.  beq itsalightbeam
  2352.  cmp.w #7,d0
  2353.  beq.s itswater
  2354.  cmp.w #9,d0
  2355.  ble itsachunkyfloor
  2356.  cmp.w #11,d0
  2357.  ble.s itsabumpyfloor
  2358.  cmp.w #12,d0
  2359.  beq.s itsbackdrop
  2360.  cmp.w #13,d0
  2361.  beq.s itsaseewall
  2362.  
  2363.  bra polyloop
  2364.  
  2365. itsaseewall:
  2366.  st seethru
  2367.  jsr itsawalldraw
  2368.  bra polyloop
  2369.  
  2370. itsbackdrop:
  2371.  jsr putinbackdrop
  2372.  bra polyloop
  2373.  
  2374. itswater:
  2375.  move.w #1,d0
  2376.  move.l #FloorLine,LineToUse
  2377.  st usewater
  2378.  clr.b usebumps
  2379.  jsr itsafloordraw
  2380.  bra polyloop
  2381.  
  2382. itsanarc:
  2383.  jsr CurveDraw
  2384.  bra polyloop
  2385. itsanobject:
  2386.  jsr ObjDraw
  2387.  bra polyloop
  2388. itsalightbeam:
  2389.  jsr LightDraw
  2390.  bra polyloop
  2391.  
  2392. itsabumpyfloor:
  2393.  sub.w #9,d0
  2394.  st usebumps
  2395.  st smoothbumps
  2396.  clr.b usewater
  2397.  move.l #BumpLine,LineToUse
  2398.  jsr itsafloordraw
  2399.  bra polyloop
  2400.  
  2401. itsachunkyfloor:
  2402.  subq.w #7,d0
  2403.  st usebumps
  2404.  sub.w #12,topclip
  2405. ; add.w #10,botclip
  2406.  clr.b smoothbumps
  2407.  clr.b usewater
  2408.  move.l #BumpLine,LineToUse
  2409.  jsr itsafloordraw
  2410.  add.w #12,topclip
  2411. ; sub.w #10,botclip
  2412.  bra polyloop 
  2413.  
  2414. itsafloor:
  2415.  
  2416.  move.l #FloorLine,LineToUse
  2417. * 1,2 = floor/roof
  2418.  clr.b usewater
  2419.  clr.b usebumps
  2420.  st.b gourfloor    
  2421.  jsr itsafloordraw
  2422.  bra polyloop
  2423. itsasetclip:
  2424.  bra polyloop
  2425. itsawall:
  2426.  clr.b seethru
  2427. ; move.l #stripbuffer,a1
  2428.  jsr itsawalldraw
  2429.  bra polyloop
  2430.  
  2431. jumpoutofloop:
  2432.  rts
  2433.  
  2434. ThisRoomToDraw: dc.l 0,0
  2435. SplitHeight: dc.l 0
  2436.  
  2437.  include "ab3:source/OrderZones"
  2438.  
  2439. ReadMouse:
  2440.  clr.l d0
  2441.  clr.l d1
  2442.  move.w $a(a6),d0
  2443.  lsr.w #8,d0
  2444.  ext.l d0
  2445.  move.w d0,d3
  2446.  move.w oldmy,d2
  2447.  sub.w d2,d0
  2448.  
  2449.  cmp.w #127,d0
  2450.  blt nonegy
  2451.  move.w #255,d1
  2452.  sub.w d0,d1
  2453.  move.w d1,d0
  2454.  neg.w d0
  2455. nonegy:
  2456.  
  2457.  cmp.w #-127,d0
  2458.  bge nonegy2
  2459.  move.w #255,d1
  2460.  add.w d0,d1
  2461.  move.w d1,d0
  2462. nonegy2:
  2463.  
  2464.  add.b d0,d2
  2465.  add.w d0,oldy2
  2466.  move.w d2,oldmy
  2467.  move.w d2,d0
  2468.  
  2469.  move.w oldy2,d0
  2470.  move.w d0,ymouse
  2471.  
  2472.  clr.l d0
  2473.  clr.l d1
  2474.  move.w $a(a6),d0
  2475.  ext.w d0
  2476.  ext.l d0
  2477.  move.w d0,d3
  2478.  move.w oldmx,d2
  2479.  sub.w d2,d0
  2480.  
  2481.  cmp.w #127,d0
  2482.  blt nonegx
  2483.  move.w #255,d1
  2484.  sub.w d0,d1
  2485.  move.w d1,d0
  2486.  neg.w d0
  2487. nonegx:
  2488.  
  2489.  cmp.w #-127,d0
  2490.  bge nonegx2
  2491.  move.w #255,d1
  2492.  add.w d0,d1
  2493.  move.w d1,d0
  2494. nonegx2:
  2495.  
  2496.  add.b d0,d2
  2497.  move.w d0,d1
  2498.  move.w d2,oldmx
  2499.  
  2500.  move.w #$0,$dff034
  2501.  btst #2,$dff016
  2502.  beq.s noturn
  2503.  
  2504.  add.w d0,oldx2
  2505.  move.w oldx2,d0
  2506.  and.w #2047,d0
  2507.  move.w d0,oldx2
  2508.  
  2509.  asl.w #2,d0
  2510.  sub.w prevx,d0
  2511.  add.w d0,prevx
  2512.  add.w d0,PLR1s_angpos
  2513.  move.w #0,lrs
  2514.  rts
  2515.  
  2516. noturn:
  2517.  
  2518. ; got to move lr instead. 
  2519.  
  2520. ; d1 = speed moved l/r
  2521.  
  2522.  move.w d1,lrs
  2523.  
  2524.  rts
  2525.  
  2526. lrs: dc.w 0
  2527. prevx: dc.w 0
  2528.  
  2529. mang: dc.w 0
  2530. oldymouse: dc.w 0
  2531. xmouse: dc.w 0
  2532. ymouse: dc.w 0
  2533. oldx2: dc.w 0
  2534. oldmx: dc.w 0
  2535. oldmy: dc.w 0
  2536. oldy2: dc.w 0
  2537.  
  2538. RotateLevelPts:
  2539.  
  2540.  move.w sinval,d6
  2541.  swap d6
  2542.  move.w cosval,d6
  2543.  
  2544.  move.l PointsToRotatePtr,a0
  2545.  move.l Points,a3
  2546.  move.l #Rotated,a1
  2547.  move.l #OnScreen,a2
  2548.  move.w xoff,d4
  2549.  move.w zoff,d5
  2550.  
  2551. ; move.w #$c40,$dff106
  2552. ; move.w #$f00,$dff180
  2553.  
  2554. pointrotlop:
  2555.  move.w (a0)+,d7
  2556.  blt.s outofpointrot
  2557.  
  2558.  move.w (a3,d7*4),d0
  2559.  sub.w d4,d0
  2560.  move.w d0,d2
  2561.  move.w 2(a3,d7*4),d1
  2562.  sub.w d5,d1
  2563.  muls d6,d2
  2564.  swap d6
  2565.  move.w d1,d3
  2566.  muls d6,d3
  2567.  sub.l d3,d2
  2568.  add.l d2,d2
  2569.  swap d2
  2570.  ext.l d2
  2571.  asl.l #7,d2
  2572.  add.l xwobble,d2
  2573.  move.l d2,(a1,d7*8)
  2574.  
  2575.  muls d6,d0
  2576.  swap d6
  2577.  muls d6,d1
  2578.  add.l d0,d1
  2579.  asl.l #2,d1
  2580.  swap d1
  2581.  move.l d1,4(a1,d7*8)
  2582.  
  2583.  tst.w d1
  2584.  bgt.s ptnotbehind
  2585.  tst.w d2
  2586.  bgt.s onrightsomewhere
  2587.  move.w #0,d2
  2588.  bra putin
  2589. onrightsomewhere:
  2590.  move.w #96,d2
  2591.  bra putin
  2592. ptnotbehind:
  2593.  
  2594.  divs d1,d2
  2595.  add.w #47,d2
  2596. putin:
  2597.  move.w d2,(a2,d7*2)
  2598.  
  2599.  bra pointrotlop
  2600. outofpointrot:
  2601.  
  2602. ; move.w #$c40,$dff106
  2603. ; move.w #$ff0,$dff180
  2604.  
  2605.  rts
  2606.  
  2607. PLR1_ObjDists
  2608.  ds.w 200
  2609. PLR2_ObjDists
  2610.  ds.w 200
  2611.  
  2612. CalcPLR1InLine:
  2613.  
  2614.  move.w PLR1_sinval,d5
  2615.  move.w PLR1_cosval,d6
  2616.  move.l ObjectData,a4
  2617.  move.l ObjectPoints,a0
  2618.  move.w NumObjectPoints,d7
  2619.  move.l #PLR1_ObsInLine,a2
  2620.  move.l #PLR1_ObjDists,a3
  2621.  
  2622. .objpointrotlop:
  2623.  
  2624.  move.w (a0),d0
  2625.  sub.w PLR1_xoff,d0
  2626.  move.w 4(a0),d1
  2627.  addq #8,a0
  2628.  
  2629.  tst.w 12(a4)
  2630.  blt .noworkout
  2631.  
  2632.  sub.w PLR1_zoff,d1
  2633.  move.w d0,d2
  2634.  muls d6,d2
  2635.  move.w d1,d3
  2636.  muls d5,d3
  2637.  sub.l d3,d2
  2638.  add.l d2,d2
  2639.  swap d2
  2640.  
  2641.  muls d5,d0
  2642.  muls d6,d1
  2643.  add.l d0,d1
  2644.  asl.l #2,d1
  2645.  swap d1
  2646.  moveq #0,d3
  2647.  
  2648.  ext.l d2
  2649.  asl.l #7,d2
  2650.  tst.w d1
  2651.  ble.s .notinline
  2652.  
  2653.  divs d1,d2
  2654.  cmp.w #20,d2
  2655.  bgt.s .notinline
  2656.  cmp.w #-20,d2
  2657.  blt.s .notinline
  2658.  st d3
  2659. .notinline
  2660.  move.b d3,(a2)+
  2661.  
  2662.  move.w d1,(a3)+
  2663.  
  2664.  add.w #64,a4
  2665.  dbra d7,.objpointrotlop
  2666.  
  2667.  rts
  2668.  
  2669. .noworkout:
  2670.  move.b #0,(a2)+
  2671.  move.w #0,(a3)+
  2672.  add.w #64,a4
  2673.  dbra d7,.objpointrotlop
  2674.  rts
  2675.  
  2676.  
  2677. CalcPLR2InLine:
  2678.  
  2679.  move.w PLR2_sinval,d5
  2680.  move.w PLR2_cosval,d6
  2681.  move.l ObjectData,a4
  2682.  move.l ObjectPoints,a0
  2683.  move.w NumObjectPoints,d7
  2684.  move.l #PLR2_ObsInLine,a2
  2685.  move.l #PLR2_ObjDists,a3
  2686.  
  2687. .objpointrotlop:
  2688.  
  2689.  move.w (a0),d0
  2690.  sub.w PLR2_xoff,d0
  2691.  move.w 4(a0),d1
  2692.  addq #8,a0
  2693.  
  2694.  tst.w 12(a4)
  2695.  blt .noworkout
  2696.  
  2697.  sub.w PLR2_zoff,d1
  2698.  move.w d0,d2
  2699.  muls d6,d2
  2700.  move.w d1,d3
  2701.  muls d5,d3
  2702.  sub.l d3,d2
  2703.  add.l d2,d2
  2704.  swap d2
  2705.  
  2706.  muls d5,d0
  2707.  muls d6,d1
  2708.  add.l d0,d1
  2709.  asl.l #2,d1
  2710.  swap d1
  2711.  moveq #0,d3
  2712.  
  2713.  ext.l d2
  2714.  asl.l #7,d2
  2715.  tst.w d1
  2716.  ble.s .notinline
  2717.  
  2718.  divs d1,d2
  2719.  cmp.w #20,d2
  2720.  bgt.s .notinline
  2721.  cmp.w #-20,d2
  2722.  blt.s .notinline
  2723.  st d3
  2724. .notinline
  2725.  move.b d3,(a2)+
  2726.  
  2727.  move.w d1,(a3)+
  2728.  
  2729.  add.w #64,a4
  2730.  dbra d7,.objpointrotlop
  2731.  
  2732.  rts
  2733.  
  2734. .noworkout:
  2735.  move.w #0,(a3)+
  2736.  move.b #0,(a2)+
  2737.  add.w #64,a4
  2738.  dbra d7,.objpointrotlop
  2739.  rts
  2740.  
  2741.  
  2742. RotateObjectPts:
  2743.  
  2744.  move.w sinval,d5
  2745.  move.w cosval,d6
  2746.  
  2747.  move.l ObjectData,a4
  2748.  move.l ObjectPoints,a0
  2749.  move.w NumObjectPoints,d7
  2750.  move.l #ObjRotated,a1
  2751.  
  2752.  
  2753. .objpointrotlop:
  2754.  
  2755.  move.w (a0),d0
  2756.  sub.w xoff,d0
  2757.  move.w 4(a0),d1
  2758.  addq #8,a0
  2759.  
  2760.  tst.w 12(a4)
  2761.  blt .noworkout
  2762.  
  2763.  sub.w zoff,d1
  2764.  move.w d0,d2
  2765.  muls d6,d2
  2766.  move.w d1,d3
  2767.  muls d5,d3
  2768.  sub.l d3,d2
  2769.  add.l d2,d2
  2770.  swap d2
  2771.  move.w d2,(a1)+
  2772.  
  2773.  muls d5,d0
  2774.  muls d6,d1
  2775.  add.l d0,d1
  2776.  asl.l #2,d1
  2777.  swap d1
  2778.  moveq #0,d3
  2779.  
  2780.  move.w d1,(a1)+
  2781.  ext.l d2
  2782.  asl.l #7,d2
  2783.  add.l xwobble,d2
  2784.  move.l d2,(a1)+
  2785.  sub.l xwobble,d2
  2786.  
  2787.  add.w #64,a4
  2788.  dbra d7,.objpointrotlop
  2789.  
  2790.  rts
  2791.  
  2792. .noworkout:
  2793.   move.l #0,(a1)+
  2794.   move.l #0,(a1)+
  2795.   add.w #64,a4
  2796.   dbra d7,.objpointrotlop
  2797.   rts
  2798.  
  2799. LightDraw:
  2800.  
  2801.  move.w (a0)+,d0
  2802.  move.w (a0)+,d1
  2803.  move.l #Rotated,a1
  2804.  move.w 6(a1,d0.w*8),d2
  2805.  ble.s oneendbehind
  2806.  move.w 6(a1,d1.w*8),d3
  2807.  bgt.s bothendsinfront
  2808.  
  2809. oneendbehind:
  2810.  rts
  2811. bothendsinfront:
  2812.  
  2813.  move.l #OnScreen,a2
  2814.  move.w (a2,d0.w*2),d0
  2815.  bge.s okleftend
  2816.  moveq #0,d0
  2817. okleftend:
  2818.  move.w (a2,d1.w*2),d1
  2819.  bgt.s somevis
  2820.  rts
  2821. somevis:
  2822.  cmp.w #95,d0
  2823.  ble.s somevis2
  2824.  rts
  2825. somevis2:
  2826.  cmp.w #95,d1
  2827.  ble.s okrightend
  2828.  move.w #95,d1
  2829. okrightend:
  2830.  
  2831.  sub.w d0,d1
  2832.  blt.s wrongbloodywayround
  2833.  move.l #brightentab,a4
  2834.  move.l #objintocop,a1
  2835.  lea (a1,d0.w*2),a1
  2836.  
  2837.  move.l frompt,a3
  2838.  move.w #104*4,d6
  2839.  move.w #79,d2
  2840. lacross:
  2841.  move.w d2,d3
  2842.  move.l a3,a2
  2843.  adda.w (a1)+,a2
  2844. ldown:
  2845.  add.w d6,a2
  2846.  move.w (a2),d7
  2847.  move.w (a4,d7.w*2),(a2)
  2848.  dbra d3,ldown
  2849.  dbra d1,lacross
  2850.  
  2851. wrongbloodywayround:
  2852.  
  2853.  rts
  2854.  
  2855. FaceToPlace: dc.w 0
  2856.  
  2857. Cheese:
  2858.  dc.w 4,15
  2859.  
  2860. FacesList:
  2861.  dc.w 0,4*4
  2862.  dc.w 1,2*4
  2863.  dc.w 0,2*4
  2864.  dc.w 2,2*4
  2865.  dc.w 0,2*4
  2866.  dc.w 1,3*4
  2867.  dc.w 0,2*4
  2868.  dc.w 2,3*4
  2869.  dc.w 0,5*4
  2870.  dc.w 1,2*4
  2871.  dc.w 0,2*4
  2872.  dc.w 2,2*4
  2873.  dc.w 0,2*4
  2874.  dc.w 1,2*4
  2875.  dc.w 0,2*4
  2876.  dc.w 2,3*4
  2877.  dc.w 0,1*4
  2878.  dc.w 1,3*4
  2879.  dc.w 0,1*4
  2880.  dc.w 2,3*4
  2881.  dc.w 0,1*4
  2882.  
  2883. EndOfFacesList:
  2884.  
  2885. FacesPtr:
  2886.  dc.l FacesList
  2887. FacesCounter:
  2888.  dc.w 0
  2889. Expression:
  2890.  dc.w 0
  2891.  
  2892. PlaceFace:
  2893.  
  2894.  move.w FacesCounter,d0
  2895.  subq #1,d0
  2896.  bgt.s NoNewFace
  2897.  
  2898.  move.l FacesPtr,a0
  2899.  
  2900.  move.w 2(a0),d0
  2901.  move.w (a0),Expression
  2902.  addq #4,a0
  2903.  cmp.l #EndOfFacesList,a0
  2904.  blt.s NotFirstFace
  2905.  
  2906.  move.l #FacesList,a0
  2907.  
  2908. NotFirstFace
  2909.  move.l a0,FacesPtr
  2910.  
  2911. NoNewFace:
  2912.  
  2913.  move.w d0,FacesCounter
  2914.  
  2915.  Move.w FaceToPlace,d0
  2916.  muls #5,d0
  2917.  add.w Expression,d0
  2918.  move.l #FacePlace+10,a0
  2919.  move.l #Faces,a1
  2920.  muls #(4*32*5),d0
  2921.  adda.w d0,a1
  2922.  move.w #4,d0
  2923.  move.w #24,d1
  2924.  
  2925.  move.w #4,d3
  2926. bitplaneloop:
  2927.  move.w #31,d2
  2928. PlaceFaceToPlaceInFacePlaceLoop:
  2929.  move.l (a1),(a0)
  2930.  adda.w d0,a1
  2931.  adda.w d1,a0
  2932.  dbra d2,PlaceFaceToPlaceInFacePlaceLoop
  2933.  dbra d3,bitplaneloop
  2934.  
  2935.  rts
  2936.  
  2937. Energy:
  2938.  dc.w 191
  2939. OldEnergy:
  2940.  dc.w 191
  2941. Ammo: dc.w 63
  2942. OldAmmo: dc.w 63
  2943.  
  2944. FullEnergy:
  2945.  move.w #127,Energy
  2946.  move.w #127,OldEnergy
  2947.  move.l #health,a0
  2948.  move.l #borders,a1
  2949.  add.l #25*8*2+6,a1
  2950.  lea 2592(a1),a2
  2951.  move.w #127,d0
  2952. PutInFull:
  2953.  move.b (a0)+,(a1)
  2954.  move.b (a0)+,8(a1)
  2955.  add.w #16,a1
  2956.  move.b (a0)+,(a2)
  2957.  move.b (a0)+,8(a2)
  2958.  add.w #16,a2
  2959.  dbra d0,PutInFull
  2960.  
  2961.  rts
  2962.  
  2963. EnergyBar:
  2964.  
  2965.  move.w Energy,d0
  2966.  cmp.w OldEnergy,d0
  2967.  bne.s gottochange
  2968.  
  2969. NoChange
  2970.  rts
  2971.  
  2972. gottochange:
  2973.   
  2974.  blt LessEnergy
  2975.  cmp.w #127,Energy
  2976.  blt.s NotMax
  2977.  move.w #127,Energy
  2978. NotMax:
  2979.  
  2980.  move.w Energy,d0
  2981.  move.w OldEnergy,d2
  2982.  sub.w d0,d2
  2983.  beq.s NoChange    
  2984.  neg.w d2
  2985.  
  2986.  move.w #127,d3
  2987.  sub.w d0,d3
  2988.  
  2989.  move.l #health,a0
  2990.  lea (a0,d3.w*4),a0
  2991.  move.l #borders+25*16+6,a1
  2992.  lsl.w #4,d3
  2993.  add.w d3,a1
  2994.  lea 2592(a1),a2
  2995.  
  2996. EnergyRise:
  2997.  move.b (a0)+,(a1)
  2998.  move.b (a0)+,8(a1)
  2999.  add.w #16,a1
  3000.  move.b (a0)+,(a2)
  3001.  move.b (a0)+,8(a2)
  3002.  add.w #16,a2
  3003.  subq #1,d2
  3004.  bgt.s EnergyRise
  3005.  
  3006.  move.w Energy,OldEnergy
  3007.  
  3008.  rts 
  3009.  
  3010. LessEnergy: 
  3011.  move.w OldEnergy,d2
  3012.  sub.w d0,d2
  3013.  
  3014.  move.w #127,d3
  3015.  sub.w OldEnergy,d3
  3016.  
  3017.  move.l #borders+25*16+6,a1
  3018.  asl.w #4,d3
  3019.  add.w d3,a1
  3020.  lea 2592(a1),a2
  3021.  
  3022. EnergyDrain:
  3023.  move.b #0,(a1)
  3024.  move.b #0,8(a1)
  3025.  move.b #0,(a2)
  3026.  move.b #0,8(a2)
  3027.  add.w #16,a1
  3028.  add.w #16,a2
  3029.  subq #1,d2
  3030.  bgt.s EnergyDrain
  3031.  
  3032.  move.w Energy,OldEnergy
  3033.  
  3034.  rts 
  3035.  
  3036. AmmoBar:
  3037.  
  3038.  move.w Ammo,d0
  3039.  cmp.w OldAmmo,d0
  3040.  bne.s .gottochange
  3041.  
  3042. .NoChange
  3043.  rts
  3044.  
  3045. .gottochange:
  3046.   
  3047.  blt LessAmmo
  3048.  cmp.w #63,Ammo
  3049.  blt.s .NotMax
  3050.  move.w #63,Ammo
  3051. .NotMax:
  3052.  
  3053.  move.w Ammo,d0
  3054.  move.w OldAmmo,d2
  3055.  sub.w d0,d2
  3056.  beq.s .NoChange
  3057.  neg.w d2
  3058.  
  3059.  move.w #63,d3
  3060.  sub.w d0,d3
  3061.  
  3062.  move.l #Ammunition,a0
  3063.  lea (a0,d3.w*8),a0
  3064.  move.l #borders+5184+25*16+1,a1
  3065.  lsl.w #5,d3
  3066.  add.w d3,a1
  3067.  lea 2592(a1),a2
  3068.  
  3069. AmmoRise:
  3070.  move.b (a0)+,(a1)
  3071.  move.b (a0)+,8(a1)
  3072.  add.w #16,a1
  3073.  move.b (a0)+,(a2)
  3074.  move.b (a0)+,8(a2)
  3075.  add.w #16,a2
  3076.  move.b (a0)+,(a1)
  3077.  move.b (a0)+,8(a1)
  3078.  add.w #16,a1
  3079.  move.b (a0)+,(a2)
  3080.  move.b (a0)+,8(a2)
  3081.  add.w #16,a2
  3082.  subq #1,d2
  3083.  bgt.s AmmoRise
  3084.  
  3085.  move.w Ammo,OldAmmo
  3086.  
  3087.  rts 
  3088.  
  3089.  
  3090. LessAmmo: 
  3091.  move.w OldAmmo,d2
  3092.  sub.w d0,d2
  3093.  
  3094.  move.w #63,d3
  3095.  sub.w OldAmmo,d3
  3096.  
  3097.  move.l #borders++5184+25*16+1,a1
  3098.  asl.w #5,d3
  3099.  add.w d3,a1
  3100.  lea 2592(a1),a2
  3101.  
  3102. AmmoDrain:
  3103.  move.b #0,(a1)
  3104.  move.b #0,8(a1)
  3105.  move.b #0,(a2)
  3106.  move.b #0,8(a2)
  3107.  add.w #16,a1
  3108.  add.w #16,a2
  3109.  move.b #0,(a1)
  3110.  move.b #0,8(a1)
  3111.  move.b #0,(a2)
  3112.  move.b #0,8(a2)
  3113.  add.w #16,a1
  3114.  add.w #16,a2
  3115.  subq #1,d2
  3116.  bgt.s AmmoDrain
  3117.  
  3118.  move.w Ammo,OldAmmo
  3119.  
  3120.  rts 
  3121.  
  3122. nulop:
  3123.  move.w #$0010,$dff000+intreq
  3124.  rte
  3125.  
  3126. doanything: dc.w 0
  3127.  
  3128. end:
  3129.  
  3130.  move.l drawpt,d0
  3131.  move.l olddrawpt,drawpt
  3132.  move.l d0,olddrawpt
  3133.  move.l d0,$dff084
  3134.  
  3135.  clr.b doanything
  3136.  cmp.b #'b',Prefsfile+3
  3137.  bne.s .noback
  3138.  jsr mt_end
  3139. .noback
  3140.  tst.w Energy
  3141.  bgt.s wevewon
  3142.  
  3143.  move.l #gameover,mt_data
  3144.  st UseAllChannels
  3145.  clr.b reachedend
  3146.  jsr mt_init
  3147. playgameover:
  3148.  move.l #$dff000,a6
  3149. waitfortop2:
  3150.  btst.b #0,intreqrl(a6)
  3151.  beq waitfortop2
  3152.  move.w #$1,intreq(a6)
  3153.  
  3154.  jsr mt_music
  3155.  
  3156.  tst.b reachedend
  3157.  beq.s playgameover
  3158.  
  3159.  bra wevelost
  3160. wevewon:
  3161.  move.l #welldone,mt_data
  3162.  st UseAllChannels
  3163.  clr.b reachedend
  3164.  jsr mt_init
  3165. playwelldone:
  3166.  move.l #$dff000,a6
  3167. waitfortop3:
  3168.  btst.b #0,intreqrl(a6)
  3169.  beq waitfortop3
  3170.  move.w #$1,intreq(a6)
  3171.  
  3172.  jsr mt_music
  3173.  
  3174.  tst.b reachedend
  3175.  beq.s playwelldone
  3176.  
  3177.  
  3178. wevelost:
  3179.  jmp closeeverything 
  3180.  
  3181. endnomusic
  3182.  clr.b doanything
  3183.  cmp.b #'b',Prefsfile+3
  3184.  bne.s .noback
  3185.  jsr mt_end
  3186. .noback
  3187.  jmp closeeverything
  3188.  
  3189. do32:
  3190.  move.w #31,d7
  3191.  move.w #$180,d1
  3192. across:
  3193.  move.w d1,(a1)+
  3194.  move.w d1,(a3)+
  3195.  move.w #0,(a1)+
  3196.  move.w #0,(a3)+
  3197.  add.w #2,d1
  3198.  dbra d7,across
  3199.  rts
  3200.  
  3201.  
  3202.  
  3203. *************************************
  3204. * Set left and right clip values
  3205. *************************************
  3206.  
  3207.  
  3208.  
  3209. NEWsetlclip:
  3210.  move.l #OnScreen,a1
  3211.  move.l #Rotated,a2
  3212.  move.l CONNECT_TABLE,a3
  3213.  
  3214.  move.w (a0),d0
  3215.  bge.s .notignoreleft
  3216.  
  3217. ; move.l #0,(a6)
  3218.  
  3219.  bra .leftnotoktoclip
  3220. .notignoreleft:
  3221.  
  3222.  move.w 6(a2,d0*8),d3    ; left z val
  3223.  bgt.s .leftclipinfront
  3224.  addq #2,a0
  3225.  rts
  3226.  
  3227.  tst.w 6(a2,d0*8)
  3228.  bgt.s .leftnotoktoclip
  3229. .ignoreboth:
  3230. ; move.l #0,(a6)
  3231. ; move.l #96*65536,4(a6)
  3232.  move.w #0,leftclip
  3233.  move.w #96,rightclip
  3234.  addq #8,a6
  3235.  addq #2,a0
  3236.  rts
  3237.  
  3238. .leftclipinfront:
  3239.  move.w (a1,d0*2),d1    ; left x on screen
  3240.  move.w (a0),d2
  3241.  move.w 2(a3,d2.w*4),d2
  3242.  move.w (a1,d2.w*2),d2
  3243.  cmp.w d1,d2
  3244.  bgt.s .leftnotoktoclip
  3245.  
  3246. ; move.w d1,(a6)
  3247. ; move.w d3,2(a6)
  3248.  cmp.w leftclip(pc),d1
  3249.  ble.s .leftnotoktoclip
  3250.  move.w d1,leftclip
  3251. .leftnotoktoclip:
  3252.  
  3253.  addq #2,a0
  3254.  
  3255.  rts
  3256.  
  3257. NEWsetrclip
  3258.  move.l #OnScreen,a1
  3259.  move.l #Rotated,a2
  3260.  move.l CONNECT_TABLE,a3
  3261.  move.w (a0),d0
  3262.  bge.s .notignoreright
  3263. ; move.w #96,4(a6)
  3264. ; move.w #0,6(a6)
  3265.  move.w #0,d4
  3266.  bra .rightnotoktoclip
  3267. .notignoreright:
  3268.  move.w 6(a2,d0*8),d4    ; right z val
  3269.  bgt.s .rightclipinfront
  3270. ; move.w #96,4(a6)
  3271. ; move.w #0,6(a6)
  3272.  bra.s .rightnotoktoclip
  3273.  
  3274. .rightclipinfront:
  3275.  move.w (a1,d0*2),d1    ; right x on screen
  3276.  move.w (a0),d2
  3277.  move.w (a3,d2.w*4),d2
  3278.  move.w (a1,d2.w*2),d2
  3279.  cmp.w d1,d2
  3280.  blt.s .rightnotoktoclip
  3281. ; move.w d1,4(a6)
  3282. ; move.w d4,6(a6)
  3283.  
  3284.  cmp.w rightclip(pc),d1
  3285.  bge.s .rightnotoktoclip
  3286.  addq #1,d1
  3287.  move.w d1,rightclip
  3288. .rightnotoktoclip:
  3289.  addq #8,a6
  3290.  addq #2,a0
  3291.  rts
  3292.  
  3293. FIRSTsetlrclip:
  3294.  move.l #OnScreen,a1
  3295.  move.l #Rotated,a2
  3296.  
  3297.  move.w (a0)+,d0
  3298.  bge.s .notignoreleft
  3299.  bra .leftnotoktoclip
  3300. .notignoreleft:
  3301.  
  3302.  move.w 6(a2,d0*8),d3    ; left z val
  3303.  bgt.s .leftclipinfront
  3304.  
  3305.  move.w (a0),d0
  3306.  blt.s .ignoreboth
  3307.  tst.w 6(a2,d0*8)
  3308.  bgt.s .leftnotoktoclip
  3309. .ignoreboth
  3310.  move.w #96,rightclip
  3311.  move.w #0,leftclip
  3312.  addq #2,a0
  3313.  rts
  3314.  
  3315. .leftclipinfront:
  3316.  move.w (a1,d0*2),d1    ; left x on screen
  3317.  cmp.w leftclip(pc),d1
  3318.  ble.s .leftnotoktoclip
  3319.  move.w d1,leftclip
  3320. .leftnotoktoclip:
  3321.  
  3322.  move.w (a0)+,d0
  3323.  bge.s .notignoreright
  3324.  move.w #0,d4
  3325.  bra .rightnotoktoclip
  3326. .notignoreright:
  3327.  move.w 6(a2,d0*8),d4    ; right z val
  3328.  ble.s .rightnotoktoclip
  3329.  
  3330. .rightclipinfront:
  3331.  move.w (a1,d0*2),d1    ; right x on screen
  3332.  cmp.w rightclip(pc),d1
  3333.  bge.s .rightnotoktoclip
  3334.  addq #1,d1
  3335.  move.w d1,rightclip
  3336. .rightnotoktoclip:
  3337.  
  3338. ; move.w leftclip,d0
  3339. ; move.w rightclip,d1
  3340. ; cmp.w d0,d1
  3341. ; bge.s .noswap
  3342. ; move.w #96,rightclip
  3343. ; move.w #0,leftclip
  3344. ;.noswap:
  3345.  
  3346.  rts
  3347.  
  3348.  
  3349. leftclip2: dc.w 0
  3350. rightclip2: dc.w 0
  3351. ZoneBright: dc.w 0
  3352.  
  3353. npolys: dc.w 0
  3354.  
  3355. PLR1_fire: dc.b 0
  3356. PLR2_fire: dc.b 0
  3357.  
  3358. *****************************************************
  3359.  
  3360.  include "ab3:source/ObjectMove"
  3361.  
  3362. pastdata:
  3363. ***********************************
  3364. * This routine animates brightnesses.
  3365.  
  3366.  
  3367. liftpt: dc.l liftanimtab
  3368.  
  3369. brightpt:
  3370.  dc.l brightanimtab
  3371.  
  3372.  
  3373. liftanim:
  3374.  rts
  3375.  
  3376. ******************************
  3377.  include "ab3:source/Anims"
  3378. ******************************
  3379. startpass:
  3380. ; include "ab3:source/password_reloc.s"
  3381. endpass:
  3382.  
  3383. rotanimpt: dc.w 0
  3384. xradd: dc.w 5
  3385. yradd: dc.w 8
  3386. xrpos: dc.w 320
  3387. yrpos: dc.w 320
  3388.  
  3389. rotanim:
  3390.  rts
  3391.  
  3392. option:
  3393.  dc.l 0,0
  3394.  
  3395. ********** WALL STUFF *******************************
  3396.  
  3397.  include "AB3:source/wallroutine3.chipmem"
  3398.  
  3399. *****************************************************
  3400.  
  3401. ******************************************
  3402. * floor polygon
  3403.  
  3404. numsidestd: dc.w 0
  3405. bottomline: dc.w 0
  3406.  
  3407. NewCornerBuff:
  3408.  ds.l 100
  3409.  
  3410. itsafloordraw:
  3411.  
  3412. * If D0 =1 then its a floor otherwise (=2) it's
  3413. * a roof.
  3414.  
  3415.  move.w #0,above
  3416.  move.w (a0)+,d6    ; ypos of poly
  3417.  
  3418.  move.w leftclip(pc),d7
  3419.  cmp.w rightclip(pc),d7
  3420.  bge.s dontdrawreturn
  3421.  
  3422.  move.w botclip,d7
  3423.  sub.w #40,d7
  3424.  ble.s dontdrawreturn
  3425.  sub.w flooryoff,d6
  3426.  bgt.s below
  3427.  blt.s aboveplayer
  3428. dontdrawreturn:
  3429.  move.w (a0)+,d6    ; sides-1
  3430.  add.w d6,d6
  3431.  add.w d6,a0
  3432.  add.w #4+6,a0
  3433.  rts
  3434. aboveplayer:
  3435.  cmp.w #2,d0
  3436.  bne.s dontdrawreturn
  3437.  move.w #40,d7
  3438.  sub.w topclip,d7 
  3439.  blt.s dontdrawreturn
  3440.  move.w #1,d0
  3441.  move.w d0,above
  3442.  neg.w d6
  3443. below:
  3444.  cmp.w #1,d0
  3445.  bne.s dontdrawreturn
  3446.  move.w d6,distaddr
  3447.  muls #64,d6
  3448.  move.l d6,ypos
  3449.  divs d7,d6        ; zpos of bottom
  3450.             ; visible line
  3451.  move.w d6,minz
  3452.  move.w d7,bottomline
  3453.  
  3454. ; Go round each point finding out
  3455. ; if it should be visible or not.
  3456.  
  3457.  move.l a0,-(a7)
  3458.  
  3459.  move.w (a0)+,d7    ; number of sides
  3460.  move.l #Rotated,a1
  3461.  move.l #OnScreen,a2
  3462.  move.l #NewCornerBuff,a3
  3463.  moveq #0,d4
  3464.  moveq #0,d5
  3465.  moveq #0,d6
  3466.  clr.b anyclipping
  3467.  
  3468. cornerprocessloop:
  3469.  
  3470.  move.w (a0)+,d0
  3471.  move.w 6(a1,d0.w*8),d1
  3472.  ble  .canttell
  3473.  
  3474.  move.w (a2,d0.w*2),d3
  3475.  cmp.w leftclip,d3
  3476.  bgt.s .nol
  3477.  st d4
  3478.  st anyclipping
  3479.  bra.s .nos
  3480. .nol:
  3481.  cmp.w rightclip,d3
  3482.  blt.s .nor
  3483.  st d6
  3484.  st anyclipping
  3485.  bra.s .nos
  3486. .nor:
  3487.  st d5
  3488. .nos:
  3489.  bra .cantell
  3490.  
  3491. .canttell:
  3492.  st d5
  3493.  st anyclipping
  3494.  
  3495. .cantell:
  3496.  
  3497.  
  3498.  dbra d7,cornerprocessloop
  3499.  
  3500.  move.l (a7)+,a0
  3501.  tst.b d5
  3502.  bne.s somefloortodraw
  3503.  eor.b d4,d6
  3504.  bne dontdrawreturn
  3505.  
  3506. somefloortodraw:
  3507.  
  3508.  tst.b gourfloor
  3509.  bne goursides
  3510.  
  3511.  move.w #80,top
  3512.  move.w #-1,bottom
  3513.  move.w #0,drawit
  3514.  move.l #Rotated,a1
  3515.  move.l #OnScreen,a2
  3516.  move.w (a0)+,d7    ; no of sides
  3517. sideloop:
  3518.  move.w minz,d6
  3519.  move.w (a0)+,d1
  3520.  move.w (a0),d3
  3521.  move.w 6(a1,d1*8),d4    ;first z
  3522.  cmp.w d6,d4
  3523.  bgt firstinfront
  3524.  move.w 6(a1,d3*8),d5    ; sec z
  3525.  cmp.w d6,d5
  3526.  ble bothbehind
  3527. ** line must be on left and partially behind.
  3528.  sub.w d5,d4
  3529.  move.l (a1,d1*8),d0
  3530.  sub.l (a1,d3*8),d0
  3531.  asr.l #7,d0
  3532.  sub.w d5,d6
  3533.  muls d6,d0    ; new x coord
  3534.  divs d4,d0
  3535.  ext.l d0
  3536.  asl.l #7,d0
  3537.  
  3538.  add.l (a1,d3*8),d0
  3539.  move.w minz,d4
  3540.  move.w (a2,d3*2),d2
  3541.  divs d4,d0
  3542.  add.w #47,d0
  3543.  move.l ypos,d3
  3544.  divs d5,d3
  3545.  move.w bottomline,d1 
  3546.  bra lineclipped
  3547.  
  3548. firstinfront:
  3549.  move.w 6(a1,d3*8),d5    ; sec z
  3550.  cmp.w d6,d5
  3551.  bgt bothinfront
  3552. ** line must be on right and partially behind.
  3553.  sub.w d4,d5    ; dz
  3554.  move.l (a1,d3*8),d2
  3555.  sub.l (a1,d1*8),d2    ; dx
  3556.  sub.w d4,d6
  3557.  asr.l #7,d2
  3558.  muls d6,d2    ; new x coord
  3559.  divs d5,d2
  3560.  ext.l d2
  3561.  asl.l #7,d2
  3562.  add.l (a1,d1*8),d2
  3563.  move.w minz,d5
  3564.  move.w (a2,d1*2),d0
  3565.  divs d5,d2
  3566.  add.w #47,d2
  3567.  move.l ypos,d1
  3568.  divs d4,d1
  3569.  move.w bottomline,d3 
  3570.  bra lineclipped
  3571.  
  3572. bothinfront:
  3573.  
  3574. * Also, usefully enough, both are on-screen
  3575. * so no bottom clipping is needed.
  3576.  
  3577.  move.w (a2,d1*2),d0    ; first x
  3578.  move.w (a2,d3*2),d2    ; second x
  3579.  move.l ypos,d1
  3580.  move.l d1,d3
  3581.  divs d4,d1        ; first y
  3582.  divs d5,d3        ; second y
  3583. lineclipped:
  3584.  move.l #rightsidetab,a3
  3585.  cmp.w d1,d3
  3586.  beq lineflat
  3587.  st drawit
  3588.  bgt lineonright
  3589.  move.l #leftsidetab,a3
  3590.  exg d1,d3
  3591.  exg d0,d2
  3592.  
  3593.  lea (a3,d1*2),a3
  3594.  
  3595.  cmp.w top(pc),d1
  3596.  bge.s .nonewtop
  3597.  move.w d1,top
  3598. .nonewtop:
  3599.  cmp.w bottom(pc),d3
  3600.  ble.s .nonewbot
  3601.  move.w d3,bottom
  3602. .nonewbot:
  3603.  
  3604.  sub.w d1,d3    ; dy
  3605.  sub.w d0,d2    ; dx
  3606.  
  3607.  blt .linegoingleft
  3608.  sub.w #1,d0
  3609.  
  3610.  ext.l d2
  3611.  divs d3,d2
  3612.  move.w d2,d6
  3613.  swap d2
  3614.  
  3615. ; moveq #0,d6
  3616. ; sub.w d3,d2
  3617. ; blt.s .noco
  3618. ;.makeco
  3619. ; addq #1,d6
  3620. ; sub.w d3,d2
  3621. ; bge.s .makeco
  3622. ;.noco
  3623. ; add.w d3,d2
  3624.  
  3625.  move.w d3,d4
  3626.  move.w d3,d5
  3627.  subq #1,d5
  3628.  move.w d6,d1
  3629.  addq #1,d1
  3630.  
  3631. .pixlopright:
  3632.  move.w d0,(a3)+
  3633.  sub.w d2,d4
  3634.  bge.s .nobigstep
  3635.  add.w d1,d0
  3636.  add.w d3,d4
  3637.  dbra d5,.pixlopright
  3638.  bra lineflat
  3639. .nobigstep
  3640.  add.w d6,d0
  3641.  dbra d5,.pixlopright
  3642.  bra lineflat
  3643.  
  3644. .linegoingleft:
  3645.  
  3646.  sub.w #1,d0
  3647.  
  3648.  neg.w d2
  3649.  
  3650.  ext.l d2
  3651.  divs d3,d2
  3652.  move.w d2,d6
  3653.  swap d2
  3654.  
  3655.  
  3656. ; moveq #0,d6
  3657. ; sub.w d3,d2
  3658. ; blt.s .nocol
  3659. ;.makecol
  3660. ; addq #1,d6
  3661. ; sub.w d3,d2
  3662. ; bge.s .makecol
  3663. ;.nocol
  3664. ; add.w d3,d2
  3665.  
  3666.  
  3667.  
  3668.  move.w d3,d4
  3669.  move.w d3,d5
  3670.  subq #1,d5
  3671.  
  3672.  move.w d6,d1
  3673.  addq #1,d1
  3674.  
  3675. .pixlopleft:
  3676.  sub.w d2,d4
  3677.  bge.s .nobigstepl
  3678.  sub.w d1,d0
  3679.  add.w d3,d4
  3680.  move.w d0,(a3)+
  3681.  dbra d5,.pixlopleft
  3682.  bra lineflat
  3683.  
  3684. .nobigstepl
  3685.  sub.w d6,d0
  3686.  move.w d0,(a3)+
  3687.  dbra d5,.pixlopleft
  3688.  bra lineflat
  3689.  
  3690. lineonright:
  3691.  
  3692.  lea (a3,d1*2),a3
  3693.  
  3694.  cmp.w top(pc),d1
  3695.  bge.s .nonewtop
  3696.  move.w d1,top
  3697. .nonewtop:
  3698.  cmp.w bottom(pc),d3
  3699.  ble.s .nonewbot
  3700.  move.w d3,bottom
  3701. .nonewbot:
  3702.  
  3703.  sub.w d1,d3    ; dy
  3704.  sub.w d0,d2    ; dx
  3705.  blt .linegoingleft
  3706. ; addq #1,d0
  3707.  ext.l d2
  3708.  divs d3,d2
  3709.  move.w d2,d6
  3710.  swap d2
  3711.  
  3712. ; moveq #0,d6
  3713. ; sub.w d3,d2
  3714. ; blt.s .noco
  3715. ;.makeco
  3716. ; addq #1,d6
  3717. ; sub.w d3,d2
  3718. ; bge.s .makeco
  3719. ;.noco
  3720. ; add.w d3,d2
  3721.  
  3722.  move.w d3,d4
  3723.  move.w d3,d5
  3724.  subq #1,d5
  3725.  move.w d6,d1
  3726.  addq #1,d1
  3727.  
  3728. .pixlopright:
  3729.  sub.w d2,d4
  3730.  bge.s .nobigstep
  3731.  add.w d1,d0
  3732.  add.w d3,d4
  3733.  move.w d0,(a3)+
  3734.  dbra d5,.pixlopright
  3735.  bra lineflat
  3736.  
  3737. .nobigstep
  3738.  add.w d6,d0
  3739.  move.w d0,(a3)+
  3740.  dbra d5,.pixlopright
  3741.  bra lineflat
  3742.  
  3743. .linegoingleft:
  3744. ; addq #1,d0
  3745.  neg.w d2
  3746.  
  3747.  ext.l d2
  3748.  divs d3,d2
  3749.  move.w d2,d6
  3750.  swap d2
  3751.  
  3752.  
  3753. ; moveq #0,d6
  3754. ; sub.w d3,d2
  3755. ; blt.s .nocol
  3756. ;.makecol
  3757. ; addq #1,d6
  3758. ; sub.w d3,d2
  3759. ; bge.s .makecol
  3760. ;.nocol
  3761. ; add.w d3,d2
  3762.  
  3763.  move.w d3,d4
  3764.  move.w d3,d5
  3765.  subq #1,d5
  3766.  move.w d6,d1
  3767.  addq #1,d1
  3768.  
  3769. .pixlopleft:
  3770.  move.w d0,(a3)+
  3771.  sub.w d2,d4
  3772.  bge.s .nobigstepl
  3773.  sub.w d1,d0
  3774.  add.w d3,d4
  3775.  dbra d5,.pixlopleft
  3776.  bra lineflat
  3777.  
  3778. .nobigstepl
  3779.  sub.w d6,d0
  3780.  dbra d5,.pixlopleft
  3781.  
  3782. lineflat:
  3783.  
  3784. bothbehind:
  3785.  dbra d7,sideloop
  3786.  bra pastsides
  3787.  
  3788. fbr: dc.w 0
  3789. sbr: dc.w 0
  3790.  
  3791. goursides:
  3792.  
  3793.  move.w #80,top
  3794.  move.w #-1,bottom
  3795.  move.w #0,drawit
  3796.  move.l #Rotated,a1
  3797.  move.l #OnScreen,a2
  3798.  move.w (a0)+,d7    ; no of sides
  3799. sideloopGOUR:
  3800.  move.w minz,d6
  3801.  move.w (a0)+,d1
  3802.  move.w (a0),d3
  3803.  
  3804.  move.l #CurrentPointBrights,a4
  3805.  move.w (a4,d1.w*2),fbr
  3806.  move.w (a4,d3.w*2),sbr
  3807.  
  3808.  move.w 6(a1,d1*8),d4    ;first z
  3809.  cmp.w d6,d4
  3810.  bgt firstinfrontGOUR
  3811.  move.w 6(a1,d3*8),d5    ; sec z
  3812.  cmp.w d6,d5
  3813.  ble bothbehindGOUR
  3814. ** line must be on left and partially behind.
  3815.  sub.w d5,d4
  3816.  
  3817.  move.w fbr,d0
  3818.  sub.w sbr,d0
  3819.  sub.w d5,d6
  3820.  muls d6,d0
  3821.  divs d4,d0
  3822.  add.w sbr,d0
  3823.  move.w d0,fbr
  3824.  
  3825.  move.l (a1,d1*8),d0
  3826.  sub.l (a1,d3*8),d0
  3827.  asr.l #7,d0
  3828.  muls d6,d0    ; new x coord
  3829.  divs d4,d0
  3830.  ext.l d0
  3831.  asl.l #7,d0
  3832.  
  3833.  add.l (a1,d3*8),d0
  3834.  move.w minz,d4
  3835.  move.w (a2,d3*2),d2
  3836.  divs d4,d0
  3837.  add.w #47,d0
  3838.  move.l ypos,d3
  3839.  divs d5,d3
  3840.  
  3841.  move.w bottomline,d1 
  3842.  bra lineclippedGOUR
  3843.  
  3844. firstinfrontGOUR:
  3845.  move.w 6(a1,d3*8),d5    ; sec z
  3846.  cmp.w d6,d5
  3847.  bgt bothinfrontGOUR
  3848. ** line must be on right and partially behind.
  3849.  sub.w d4,d5    ; dz
  3850.  
  3851.  move.w sbr,d2
  3852.  sub.w fbr,d2
  3853.  sub.w d4,d6
  3854.  muls d6,d2
  3855.  divs d5,d2
  3856.  add.w fbr,d2
  3857.  move.w d2,sbr
  3858.  
  3859.  move.l (a1,d3*8),d2
  3860.  sub.l (a1,d1*8),d2    ; dx
  3861.  asr.l #7,d2
  3862.  muls d6,d2    ; new x coord
  3863.  divs d5,d2
  3864.  ext.l d2
  3865.  asl.l #7,d2
  3866.  add.l (a1,d1*8),d2
  3867.  move.w minz,d5
  3868.  move.w (a2,d1*2),d0
  3869.  divs d5,d2
  3870.  add.w #47,d2
  3871.  move.l ypos,d1
  3872.  divs d4,d1
  3873.  move.w bottomline,d3 
  3874.  bra lineclippedGOUR
  3875.  
  3876. bothinfrontGOUR:
  3877.  
  3878. * Also, usefully enough, both are on-screen
  3879. * so no bottom clipping is needed.
  3880.  
  3881.  move.w (a2,d1*2),d0    ; first x
  3882.  move.w (a2,d3*2),d2    ; second x
  3883.  move.l ypos,d1
  3884.  move.l d1,d3
  3885.  divs d4,d1        ; first y
  3886.  divs d5,d3        ; second y
  3887. lineclippedGOUR:
  3888.  move.l #rightsidetab,a3
  3889.  cmp.w d1,d3
  3890.  beq lineflatGOUR
  3891.  st drawit
  3892.  bgt lineonrightGOUR
  3893.  move.l #leftsidetab,a3
  3894.  exg d1,d3
  3895.  exg d0,d2
  3896.  
  3897.  lea (a3,d1*2),a3
  3898.  lea leftbrighttab-leftsidetab(a3),a4
  3899.  
  3900.  cmp.w top(pc),d1
  3901.  bge.s .nonewtop
  3902.  move.w d1,top
  3903. .nonewtop:
  3904.  cmp.w bottom(pc),d3
  3905.  ble.s .nonewbot
  3906.  move.w d3,bottom
  3907. .nonewbot:
  3908.  
  3909.  sub.w d1,d3    ; dy
  3910.  sub.w d0,d2    ; dx
  3911.  
  3912.  blt .linegoingleft
  3913.  sub.w #1,d0
  3914.  
  3915.  ext.l d2
  3916.  divs d3,d2
  3917.  move.w d2,d6
  3918.  swap d2
  3919.  move.w d2,a5
  3920.  
  3921. ; moveq #0,d6
  3922. ; sub.w d3,d2
  3923. ; blt.s .noco
  3924. ;.makeco
  3925. ; addq #1,d6
  3926. ; sub.w d3,d2
  3927. ; bge.s .makeco
  3928. ;.noco
  3929. ; add.w d3,d2
  3930.  
  3931.  move.w d3,d4
  3932.  move.w d3,d5
  3933.  subq #1,d5
  3934.  move.w d6,d1
  3935.  addq #1,d1
  3936.  move.w d1,a6
  3937.  
  3938.  moveq #0,d1
  3939.  move.w sbr,d1
  3940.  move.w fbr,d2
  3941.  sub.w d1,d2
  3942.  ext.l d2
  3943.  asl.w #8,d2
  3944.  asl.w #3,d2
  3945.  divs d3,d2 
  3946.  ext.l d2
  3947.  asl.l #5,d2
  3948.  swap d1
  3949.  
  3950. .pixlopright:
  3951.  move.w d0,(a3)+
  3952.  swap d1
  3953.  move.w d1,(a4)+
  3954.  swap d1
  3955.  add.l d2,d1
  3956.  
  3957.  sub.w a5,d4
  3958.  bge.s .nobigstep
  3959.  add.w a6,d0
  3960.  add.w d3,d4
  3961.  dbra d5,.pixlopright
  3962.  bra lineflatGOUR
  3963. .nobigstep
  3964.  
  3965.  add.w d6,d0
  3966.  dbra d5,.pixlopright
  3967.  bra lineflatGOUR
  3968.  
  3969. .linegoingleft:
  3970.  
  3971.  sub.w #1,d0
  3972.  
  3973.  neg.w d2
  3974.  
  3975.  ext.l d2
  3976.  divs d3,d2
  3977.  move.w d2,d6
  3978.  swap d2
  3979.  
  3980.  
  3981. ; moveq #0,d6
  3982. ; sub.w d3,d2
  3983. ; blt.s .nocol
  3984. ;.makecol
  3985. ; addq #1,d6
  3986. ; sub.w d3,d2
  3987. ; bge.s .makecol
  3988. ;.nocol
  3989. ; add.w d3,d2
  3990.  
  3991.  move.w d3,d4
  3992.  move.w d3,d5
  3993.  subq #1,d5
  3994.  
  3995.  move.w d6,d1
  3996.  addq #1,d1
  3997.  move.w d1,a6
  3998.  move.w d2,a5
  3999.  
  4000.  moveq #0,d1
  4001.  move.w sbr,d1
  4002.  move.w fbr,d2
  4003.  sub.w d1,d2
  4004.  ext.l d2
  4005.  asl.w #8,d2
  4006.  asl.w #3,d2
  4007.  divs d3,d2 
  4008.  ext.l d2
  4009.  asl.l #5,d2
  4010.  swap d1
  4011.  
  4012. .pixlopleft:
  4013.  
  4014.  swap d1
  4015.  move.w d1,(a4)+
  4016.  swap d1
  4017.  add.l d2,d1
  4018.  
  4019.  sub.w a5,d4
  4020.  bge.s .nobigstepl
  4021.  sub.w a6,d0
  4022.  add.w d3,d4
  4023.  move.w d0,(a3)+
  4024.  dbra d5,.pixlopleft
  4025.  bra lineflatGOUR
  4026.  
  4027. .nobigstepl
  4028.  sub.w d6,d0
  4029.  move.w d0,(a3)+
  4030.  dbra d5,.pixlopleft
  4031.  bra lineflatGOUR
  4032.  
  4033. lineonrightGOUR:
  4034.  
  4035.  lea (a3,d1*2),a3
  4036.  
  4037.  lea rightbrighttab-rightsidetab(a3),a4
  4038.  
  4039.  cmp.w top(pc),d1
  4040.  bge.s .nonewtop
  4041.  move.w d1,top
  4042. .nonewtop:
  4043.  cmp.w bottom(pc),d3
  4044.  ble.s .nonewbot
  4045.  move.w d3,bottom
  4046. .nonewbot:
  4047.  
  4048.  sub.w d1,d3    ; dy
  4049.  sub.w d0,d2    ; dx
  4050.  blt .linegoingleft
  4051. ; addq #1,d0
  4052.  ext.l d2
  4053.  divs d3,d2
  4054.  move.w d2,d6
  4055.  swap d2
  4056.  
  4057. ; moveq #0,d6
  4058. ; sub.w d3,d2
  4059. ; blt.s .noco
  4060. ;.makeco
  4061. ; addq #1,d6
  4062. ; sub.w d3,d2
  4063. ; bge.s .makeco
  4064. ;.noco
  4065. ; add.w d3,d2
  4066.  
  4067.  move.w d3,d4
  4068.  move.w d3,d5
  4069.  subq #1,d5
  4070.  move.w d6,d1
  4071.  addq #1,d1
  4072.  
  4073.  move.w d1,a6
  4074.  move.w d2,a5
  4075.  
  4076.  moveq #0,d1
  4077.  move.w fbr,d1
  4078.  move.w sbr,d2
  4079.  sub.w d1,d2
  4080.  ext.l d2
  4081.  asl.w #8,d2
  4082.  asl.w #3,d2
  4083.  divs d3,d2 
  4084.  ext.l d2
  4085.  asl.l #5,d2
  4086.  swap d1
  4087.  
  4088. .pixlopright:
  4089.  
  4090.  swap d1
  4091.  move.w d1,(a4)+
  4092.  swap d1
  4093.  add.l d2,d1
  4094.  
  4095.  sub.w a5,d4
  4096.  bge.s .nobigstep
  4097.  add.w a6,d0
  4098.  add.w d3,d4
  4099.  move.w d0,(a3)+
  4100.  dbra d5,.pixlopright
  4101.  bra lineflatGOUR
  4102.  
  4103. .nobigstep
  4104.  add.w d6,d0
  4105.  move.w d0,(a3)+
  4106.  dbra d5,.pixlopright
  4107.  bra lineflatGOUR
  4108.  
  4109. .linegoingleft:
  4110. ; addq #1,d0
  4111.  neg.w d2
  4112.  
  4113.  ext.l d2
  4114.  divs d3,d2
  4115.  move.w d2,d6
  4116.  swap d2
  4117.  
  4118.  
  4119. ; moveq #0,d6
  4120. ; sub.w d3,d2
  4121. ; blt.s .nocol
  4122. ;.makecol
  4123. ; addq #1,d6
  4124. ; sub.w d3,d2
  4125. ; bge.s .makecol
  4126. ;.nocol
  4127. ; add.w d3,d2
  4128.  
  4129.  move.w d3,d4
  4130.  move.w d3,d5
  4131.  subq #1,d5
  4132.  move.w d6,d1
  4133.  addq #1,d1
  4134.  move.w d1,a6
  4135.  move.w d2,a5
  4136.  
  4137.  moveq #0,d1
  4138.  move.w fbr,d1
  4139.  move.w sbr,d2
  4140.  sub.w d1,d2
  4141.  ext.l d2
  4142.  asl.w #8,d2
  4143.  asl.w #3,d2
  4144.  divs d3,d2 
  4145.  ext.l d2
  4146.  asl.l #5,d2
  4147.  swap d1
  4148.  
  4149. .pixlopleft:
  4150.  
  4151.  swap d1
  4152.  move.w d1,(a4)+
  4153.  swap d1
  4154.  add.l d2,d1
  4155.  
  4156.  move.w d0,(a3)+
  4157.  sub.w a5,d4
  4158.  bge.s .nobigstepl
  4159.  sub.w a6,d0
  4160.  add.w d3,d4
  4161.  dbra d5,.pixlopleft
  4162.  bra lineflatGOUR
  4163.  
  4164. .nobigstepl
  4165.  sub.w d6,d0
  4166.  dbra d5,.pixlopleft
  4167.  
  4168. lineflatGOUR:
  4169.  
  4170. bothbehindGOUR:
  4171.  dbra d7,sideloopGOUR
  4172.  
  4173. pastsides:
  4174.  
  4175.  
  4176.  addq #2,a0
  4177.  
  4178.  move.w #104*4,linedir
  4179.  move.l frompt,a6
  4180.  add.l #104*4*41,a6
  4181.  move.w (a0)+,scaleval
  4182.  move.w (a0)+,whichtile
  4183.  move.w (a0)+,d6
  4184.  add.w ZoneBright,d6
  4185.  move.w d6,lighttype
  4186.  move.w above(pc),d6
  4187.  beq groundfloor
  4188. * on ceiling:
  4189.  move.w #-104*4,linedir
  4190.  suba.w #104*4,a6
  4191. groundfloor:
  4192.  
  4193.  move.w xoff,d6
  4194.  move.w zoff,d7
  4195.  add.w xwobxoff,d7
  4196.  add.w xwobzoff,d6
  4197.  swap d6
  4198.  swap d7
  4199.  clr.w d6
  4200.  clr.w d7
  4201.  move.w scaleval(pc),d3
  4202.  beq.s .samescale
  4203.  bgt.s .scaledown
  4204.  neg.w d3
  4205.  asr.l d3,d7
  4206.  asr.l d3,d6
  4207.  bra.s .samescale
  4208. .scaledown:
  4209.  asl.l d3,d6
  4210.  asl.l d3,d7
  4211. .samescale
  4212.  move.l d6,sxoff
  4213.  move.l d7,szoff
  4214.  bra pastscale 
  4215.  
  4216.  asr.l #3,d1
  4217.  asr.l #3,d2
  4218.  asr.l #2,d1
  4219.  asr.l #2,d2
  4220.  asr.l #1,d1
  4221.  asr.l #1,d2
  4222. scaleprogfrom
  4223.  nop
  4224.  nop
  4225.  asl.l #1,d1
  4226.  asl.l #1,d2
  4227.  asl.l #2,d1
  4228.  asl.l #2,d2
  4229.  asl.l #3,d1
  4230.  asl.l #3,d2
  4231.  
  4232. top: dc.w 0
  4233. bottom: dc.w 0
  4234. ypos: dc.l 0
  4235. nfloors: dc.w 0
  4236. lighttype: dc.w 0
  4237. above: dc.w 0 
  4238. linedir: dc.w 0
  4239. distaddr: dc.w 0
  4240.  
  4241. minz: dc.w 0
  4242. leftsidetab:
  4243.  ds.w 180
  4244. rightsidetab:
  4245.  ds.w 180
  4246. leftbrighttab:
  4247.  ds.w 180
  4248. rightbrighttab:
  4249.  ds.w 180
  4250.  
  4251. PointBrights:
  4252.  dc.l 0
  4253. CurrentPointBrights:
  4254.  ds.l 250
  4255.  
  4256. movespd: dc.w 0
  4257. largespd: dc.l 0
  4258.  
  4259. pastscale:
  4260.  
  4261.  tst.b drawit(pc)
  4262.  beq dontdrawfloor
  4263.  
  4264.  move.l a0,-(a7)
  4265.  
  4266.  move.l #leftsidetab,a4
  4267.  move.w top(pc),d1
  4268.  move.w bottom(pc),d7
  4269.  tst.w above
  4270.  beq.s clipfloor
  4271.  
  4272.  move.w #40,d3
  4273.  move.w d3,d4
  4274.  sub.w topclip,d3
  4275.  sub.w botclip,d4
  4276.  cmp.w d3,d1
  4277.  bge predontdrawfloor
  4278.  cmp.w d4,d7
  4279.  blt predontdrawfloor
  4280.  cmp.w d4,d1
  4281.  bge.s .nocliptoproof
  4282.  move.w d4,d1
  4283. .nocliptoproof
  4284.  cmp.w d3,d7
  4285.  blt doneclip
  4286.  move.w d3,d7
  4287.  bra doneclip
  4288.  
  4289. clipfloor:
  4290.  move.w botclip,d4
  4291.  sub.w #40,d4
  4292.  cmp.w d4,d1
  4293.  bge predontdrawfloor
  4294.  move.w topclip,d3
  4295.  sub.w #40,d3
  4296.  cmp.w d3,d1
  4297.  bge.s .nocliptopfloor
  4298.  move.w d3,d1
  4299. .nocliptopfloor 
  4300.  cmp.w d3,d7
  4301.  ble predontdrawfloor
  4302.  cmp.w d4,d7
  4303.  blt.s .noclipbotfloor
  4304.  move.w d4,d7
  4305. .noclipbotfloor:
  4306.  
  4307. doneclip:
  4308.  
  4309.  lea (a4,d1*2),a4
  4310. ; move.l #dists,a2
  4311.  move.w distaddr,d0
  4312.  muls #64,d0
  4313.  move.l d0,a2
  4314. ; muls #25,d0
  4315. ; adda.w d0,a2
  4316. ; lea (a2,d1*2),a2
  4317.  sub.w d1,d7
  4318.  ble predontdrawfloor 
  4319.  move.w d1,d0
  4320.  bne.s .notzero
  4321.  moveq #1,d0
  4322. .notzero
  4323.  muls linedir,d1
  4324.  add.l d1,a6
  4325.  move.l #floorscalecols,a1
  4326.  move.l LineToUse,a5
  4327.  
  4328.  tst.b gourfloor
  4329.  bne dogourfloor
  4330.  
  4331.  tst.b anyclipping
  4332.  beq dofloornoclip
  4333.  
  4334. dofloor:
  4335. ; move.w (a2)+,d0
  4336.  move.w leftclip(pc),d3
  4337.  move.w rightclip(pc),d4
  4338.  move.w rightsidetab-leftsidetab(a4),d2
  4339.  
  4340.  addq #1,d2
  4341.  cmp.w d3,d2
  4342.  ble.s nodrawline
  4343.  cmp.w d4,d2
  4344.  ble.s noclipright
  4345.  move.w d4,d2
  4346. noclipright:
  4347.  move.w (a4),d1
  4348.  cmp.w d4,d1
  4349.  bge.s nodrawline
  4350.  cmp.w d3,d1
  4351.  bge.s noclipleft
  4352.  move.w d3,d1
  4353. noclipleft:
  4354.  cmp.w d1,d2
  4355.  ble.s nodrawline
  4356.  
  4357.  move.w d1,leftedge
  4358.  move.w d2,rightedge
  4359.  
  4360. ; moveq #0,d1
  4361. ; moveq #0,d3
  4362. ; move.w leftbrighttab-leftsidetab(a4),d1
  4363. ; bge.s .okbl
  4364. ; moveq #0,d1
  4365. ;.okbl:
  4366.  
  4367. ; move.w rightbrighttab-leftsidetab(a4),d3
  4368. ; bge.s .okbr
  4369. ; moveq #0,d3
  4370. ;.okbr:
  4371.  
  4372. ; sub.w d1,d3
  4373. ; asl.w #8,d1
  4374. ; move.l d1,leftbright
  4375. ; swap d3
  4376. ; asr.l #5,d3
  4377. ; divs d5,d3
  4378. ; move.w d3,d5
  4379. ; muls.w d6,d5
  4380. ; asr.l #3,d5
  4381. ; clr.b d5
  4382. ; add.w d5,leftbright+2
  4383.  
  4384. ; ext.l d3
  4385. ; asl.l #5,d3
  4386. ; swap d3
  4387. ; asl.w #8,d3
  4388. ; move.l d3,brightspd
  4389.  
  4390.  move.l a6,a3
  4391.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  4392.  move.l a2,d7
  4393.  divs d0,d7
  4394.  move.w d7,d0
  4395.  jsr (a5)
  4396.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  4397. nodrawline
  4398.  adda.w linedir(pc),a6
  4399.  addq #2,a4
  4400.  addq #1,d0
  4401.  subq #1,d7
  4402.  bgt dofloor
  4403.  
  4404. predontdrawfloor
  4405.  move.l (a7)+,a0
  4406.  
  4407. dontdrawfloor:
  4408.  
  4409.  CACHE_FREEZE_OFF d2
  4410.  rts
  4411.  
  4412. anyclipping: dc.w 0
  4413.  
  4414. dofloornoclip:
  4415. ; move.w (a2)+,d0
  4416.  move.w rightsidetab-leftsidetab(a4),d2
  4417.  addq #1,d2
  4418.  move.w (a4)+,d1
  4419.  move.w d1,leftedge
  4420.  move.w d2,rightedge
  4421.  
  4422. ; sub.w d1,d2
  4423.  
  4424. ; moveq #0,d1
  4425. ; moveq #0,d3
  4426. ; move.w leftbrighttab-leftsidetab(a4),d1
  4427. ; bge.s .okbl
  4428. ; moveq #0,d1
  4429. ;.okbl:
  4430.  
  4431. ; move.w rightbrighttab-leftsidetab(a4),d3
  4432. ; bge.s .okbr
  4433. ; moveq #0,d3
  4434. ;.okbr:
  4435.  
  4436. ; sub.w d1,d3
  4437. ; asl.w #8,d1
  4438. ; move.l d1,leftbright
  4439. ; swap d3
  4440. ; asr.l #5,d3
  4441. ; divs d2,d3
  4442. ; ext.l d3
  4443. ; asl.l #5,d3
  4444. ; swap d3
  4445. ; asl.w #8,d3
  4446. ; move.l d3,brightspd
  4447.  
  4448.  
  4449.  move.l a6,a3
  4450.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  4451.  move.l a2,d7
  4452.  divs d0,d7
  4453.  move.w d7,d0
  4454.  jsr (a5)
  4455.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  4456.  adda.w linedir(pc),a6
  4457.  addq #1,d0
  4458.  subq #1,d7
  4459.  bgt dofloornoclip
  4460.  
  4461.  bra predontdrawfloor
  4462.  
  4463. dogourfloor:
  4464.  tst.b anyclipping
  4465.  beq dofloornoclipGOUR
  4466.  
  4467. dofloorGOUR:
  4468. ; move.w (a2)+,d0
  4469.  move.w leftclip(pc),d3
  4470.  move.w rightclip(pc),d4
  4471.  move.w rightsidetab-leftsidetab(a4),d2
  4472.  
  4473.  move.w d2,d5
  4474.  sub.w (a4),d5
  4475.  addq #1,d5
  4476.  moveq #0,d6
  4477.  
  4478.  addq #1,d2
  4479.  cmp.w d3,d2
  4480.  ble nodrawlineGOUR
  4481.  cmp.w d4,d2
  4482.  ble.s nocliprightGOUR
  4483.  move.w d4,d2
  4484. nocliprightGOUR:
  4485.  move.w (a4),d1
  4486.  cmp.w d4,d1
  4487.  bge nodrawlineGOUR
  4488.  cmp.w d3,d1
  4489.  bge.s noclipleftGOUR
  4490.  move.w d3,d6
  4491.  sub.w d1,d6
  4492.  move.w d3,d1
  4493. noclipleftGOUR:
  4494.  cmp.w d1,d2
  4495.  ble nodrawlineGOUR
  4496.  
  4497.  move.w d1,leftedge
  4498.  move.w d2,rightedge
  4499.  
  4500.  move.l a2,d2
  4501.  divs d0,d2
  4502.  move.w d2,dst
  4503.  asr.w #7,d2
  4504. ; addq #5,d2
  4505. ; add.w lighttype,d2
  4506.  
  4507.  moveq #0,d1
  4508.  moveq #0,d3
  4509.  move.w leftbrighttab-leftsidetab(a4),d1
  4510.  add.w d2,d1
  4511.  
  4512.  bge.s .okbl
  4513.  moveq #0,d1
  4514. .okbl:
  4515.  asr.w #1,d1
  4516.  cmp.w #14,d1
  4517.  ble.s .okdl
  4518.  move.w #14,d1
  4519. .okdl:
  4520.  
  4521.  move.w rightbrighttab-leftsidetab(a4),d3
  4522.  add.w d2,d3
  4523.  bge.s .okbr
  4524.  moveq #0,d3
  4525. .okbr:
  4526.  asr.w #1,d3
  4527.  cmp.w #14,d3
  4528.  ble.s .okdr
  4529.  move.w #14,d3
  4530. .okdr:
  4531.  
  4532.  sub.w d1,d3
  4533.  asl.w #8,d1
  4534.  move.l d1,leftbright
  4535.  swap d3
  4536.  asr.l #5,d3
  4537.  divs d5,d3
  4538.  muls d3,d6
  4539.  asr.w #3,d6
  4540.  clr.b d6
  4541.  add.w #256,d6
  4542.  add.w d6,leftbright+2
  4543.  
  4544.  ext.l d3
  4545.  asl.l #5,d3
  4546.  swap d3
  4547.  asl.w #8,d3
  4548.  move.l d3,brightspd
  4549.  
  4550.  move.l a6,a3
  4551.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  4552.  move.w dst,d0
  4553.  lea floorscalecols,a1
  4554.  move.l #floortile,a0
  4555.  adda.w whichtile,a0
  4556.  jsr pastfloorbright
  4557.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  4558. nodrawlineGOUR
  4559.  adda.w linedir(pc),a6
  4560.  addq #2,a4
  4561.  addq #1,d0
  4562.  subq #1,d7
  4563.  bgt dofloorGOUR
  4564.  
  4565. predontdrawfloorGOUR
  4566.  move.l (a7)+,a0
  4567.  
  4568. dontdrawfloorGOUR:
  4569.  
  4570.  CACHE_FREEZE_OFF d2
  4571.  rts
  4572.  
  4573. dofloornoclipGOUR:
  4574. ; move.w (a2)+,d0
  4575.  move.w rightsidetab-leftsidetab(a4),d2
  4576.  addq #1,d2
  4577.  move.w (a4)+,d1
  4578.  move.w d1,leftedge
  4579.  move.w d2,rightedge
  4580.  
  4581.  sub.w d1,d2
  4582.  
  4583.  move.l a2,d6
  4584.  divs d0,d6
  4585.  move.w d6,d5
  4586.  asr.w #7,d5
  4587. ; addq #5,d5
  4588. ; add.w lighttype,d5
  4589.  
  4590.  moveq #0,d1
  4591.  moveq #0,d3
  4592.  move.w leftbrighttab-leftsidetab(a4),d1
  4593.  add.w d5,d1
  4594.  bge.s .okbl
  4595.  moveq #0,d1
  4596. .okbl:
  4597.  asr.w #1,d1
  4598.  cmp.w #14,d1
  4599.  ble.s .okdl
  4600.  move.w #14,d1
  4601. .okdl:
  4602.  
  4603.  move.w rightbrighttab-leftsidetab(a4),d3
  4604.  add.w d5,d3
  4605.  bge.s .okbr
  4606.  moveq #0,d3
  4607. .okbr:
  4608.  asr.w #1,d3
  4609.  cmp.w #14,d3
  4610.  ble.s .okdr
  4611.  move.w #14,d3
  4612. .okdr:
  4613.  
  4614.  sub.w d1,d3
  4615.  addq #1,d1
  4616.  asl.w #8,d1
  4617.  move.l d1,leftbright
  4618.  swap d3
  4619.  asr.l #5,d3
  4620.  divs d2,d3
  4621.  ext.l d3
  4622.  asl.l #5,d3
  4623.  swap d3
  4624.  asl.w #8,d3
  4625.  move.l d3,brightspd
  4626.  
  4627.  
  4628.  move.l a6,a3
  4629.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  4630.  move.w d6,d0
  4631.  move.w d0,dst
  4632.  lea floorscalecols,a1
  4633.  move.l #floortile,a0
  4634.  adda.w whichtile,a0
  4635.  jsr pastfloorbright
  4636.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  4637.  adda.w linedir(pc),a6
  4638.  addq #1,d0
  4639.  subq #1,d7
  4640.  bgt dofloornoclipGOUR
  4641.  
  4642.  bra predontdrawfloorGOUR
  4643.  
  4644.  
  4645.  
  4646. dists:
  4647. ; incbin "floordists"
  4648. drawit: dc.w 0
  4649.  
  4650. LineToUse: dc.l 0
  4651.  
  4652. ***************************
  4653. * Right then, time for the floor
  4654. * routine...
  4655. * For test purposes, give it
  4656. * a3 = point to screen
  4657. * d0= z distance away
  4658. * and sinval+cosval must be set up.
  4659. ***************************
  4660.  
  4661. leftedge: dc.w 0
  4662. rightedge: dc.w 0
  4663.  
  4664. rndpt: dc.l rndtab
  4665.  
  4666. WaterFloorLine:
  4667.  
  4668.  CACHE_OFF d2
  4669.  
  4670.  move.l rndpt,a2
  4671.  move.w (a2)+,d1
  4672.  move.w (a2)+,d2
  4673.  move.w (a2)+,d3
  4674.  cmp.l #endrnd-4,a2
  4675.  blt.s okrnd
  4676.  suba.w #98,a2
  4677. okrnd: 
  4678.  move.l a2,rndpt
  4679.  
  4680.  asr.w #7,d0
  4681.  move.w d0,d1
  4682.  move.w d0,d2
  4683.  move.w d0,d3
  4684.  move.l clipd(pc,d1.w*4),d1
  4685.  move.l clipd(pc,d2.w*4),d2
  4686.  move.l clipd(pc,d3.w*4),d3
  4687.  bra pcli
  4688.  
  4689.  dc.l 0
  4690. clipd:
  4691.  dc.l 0
  4692.  dc.l 512
  4693.  dc.l 512*2
  4694.  dc.l 512*3
  4695.  dc.l 512*4
  4696.  dc.l 512*5
  4697.  dc.l 512*6
  4698.  dc.l 512*7
  4699.  dc.l 512*8
  4700.  dc.l 512*9
  4701.  dc.l 512*10
  4702.  dc.l 512*11
  4703.  dc.l 512*12
  4704.  dc.l 512*13
  4705.  dc.l 512*14
  4706.  dc.l 512*15
  4707.  dc.l 512*15
  4708.  dc.l 512*15
  4709.  dc.l 512*15
  4710.  dc.l 512*15
  4711.  dc.l 512*15
  4712.  dc.l 512*15
  4713.  dc.l 512*15
  4714.  dc.l 512*15
  4715.  dc.l 512*15
  4716.  dc.l 512*15
  4717.  dc.l 512*15
  4718.  
  4719. pcli:
  4720.  
  4721.  move.l #brightentab,a2
  4722.  move.l a2,a4
  4723.  move.l a4,a5
  4724.  add.l d1,a2
  4725.  add.l d2,a4
  4726.  add.l d3,a5
  4727.  
  4728.  move.l #doacrossline,a1
  4729.  move.w leftedge(pc),d1
  4730.  move.w rightedge(pc),d2
  4731.  sub.w d1,d2
  4732.  move.w time(pc,d1.w*2),d1
  4733.  move.w time(pc,d2.w*2),d2
  4734.  lea (a1,d1.w),a1
  4735.  move.w (a1,d2.w),d4
  4736.  move.w #$4e75,(a1,d2.w)
  4737.  
  4738.  moveq #0,d0
  4739.  jsr (a1)
  4740.  move.w d4,(a1,d2.w)
  4741.  
  4742.  CACHE_ON d2
  4743.  
  4744.  rts
  4745.  
  4746. time:
  4747. val SET 0
  4748.  REPT 100
  4749.  dc.w val
  4750. val SET val+10
  4751.  ENDR
  4752.  
  4753. storeit: dc.l 0
  4754.  
  4755. doacrossline:
  4756.  incbin "Doacrossline"
  4757.  rts
  4758.  
  4759. dst: dc.w 0
  4760.  
  4761. FloorLine:
  4762.  
  4763.  move.l #floortile,a0
  4764.  adda.w whichtile,a0
  4765.  move.w lighttype,d1
  4766.  
  4767.  move.w d0,dst
  4768.  
  4769.  move.w d0,d2
  4770. *********************
  4771. * Old version
  4772.  asr.w #7,d2
  4773.  add.w #5,d1
  4774. *********************
  4775. ; asr.w #3,d2
  4776. ; sub.w #4,d2
  4777. ; cmp.w #6,d2
  4778. ; blt.s flbrbr
  4779. ; move.w #6,d2
  4780. ;flbrbr:
  4781. *********************
  4782.  add.w d2,d1
  4783.  bge.s .fixedbright
  4784.  moveq #0,d1
  4785. .fixedbright:
  4786.  cmp.w #28,d1
  4787.  ble.s .smallbright
  4788.  move.w #28,d1
  4789. .smallbright:
  4790.  lea floorscalecols,a1
  4791.  add.l floorbright(pc,d1.w*4),a1
  4792.  bra pastfloorbright
  4793.  
  4794. ConstCol: dc.w 0
  4795.  
  4796. BumpLine:
  4797.  
  4798.  tst.b smoothbumps
  4799.  beq.s Chunky
  4800.  
  4801.  move.l #SmoothTile,a0
  4802.  lea Smoothscalecols,a1
  4803.  bra pastast
  4804.  
  4805. Chunky:
  4806.  
  4807.  moveq #0,d2
  4808.  move.l #Bumptile,a0
  4809.  move.w whichtile,d2
  4810.  adda.w d2,a0
  4811.  ror.l #2,d2
  4812.  lsr.w #6,d2
  4813.  rol.l #2,d2
  4814.  and.w #15,d2
  4815.  move.l #ConstCols,a1
  4816.  move.w (a1,d2.w*2),ConstCol
  4817.  lea Bumpscalecols,a1
  4818.  
  4819. pastast:
  4820.  move.w lighttype,d1
  4821.  
  4822.  move.w d0,dst
  4823.  
  4824.  move.w d0,d2
  4825. *********************
  4826. * Old version
  4827.  asr.w #7,d2
  4828.  add.w #5,d1
  4829. *********************
  4830. ; asr.w #3,d2
  4831. ; sub.w #4,d2
  4832. ; cmp.w #6,d2
  4833. ; blt.s flbrbr
  4834. ; move.w #6,d2
  4835. ;flbrbr:
  4836. *********************
  4837.  add.w d2,d1
  4838.  bge.s .fixedbright
  4839.  moveq #0,d1
  4840. .fixedbright:
  4841.  cmp.w #28,d1
  4842.  ble.s .smallbright
  4843.  move.w #28,d1
  4844. .smallbright:
  4845.  add.l floorbright(pc,d1.w*4),a1
  4846.  bra pastfloorbright
  4847.  
  4848.  
  4849. floorbright:
  4850.  dc.l 512*0
  4851.  dc.l 512*1
  4852.  dc.l 512*1
  4853.  dc.l 512*2
  4854.  dc.l 512*2
  4855.  
  4856.  dc.l 512*3
  4857.  dc.l 512*3
  4858.  dc.l 512*4
  4859.  dc.l 512*4
  4860.  dc.l 512*5
  4861.  
  4862.  dc.l 512*5
  4863.  dc.l 512*6
  4864.  dc.l 512*6
  4865.  dc.l 512*7
  4866.  dc.l 512*7
  4867.  
  4868.  dc.l 512*8
  4869.  dc.l 512*8
  4870.  dc.l 512*9
  4871.  dc.l 512*9
  4872.  dc.l 512*10
  4873.  
  4874.  dc.l 512*10
  4875.  dc.l 512*11
  4876.  dc.l 512*11
  4877.  dc.l 512*12
  4878.  dc.l 512*12
  4879.  
  4880.  dc.l 512*13
  4881.  dc.l 512*13
  4882.  dc.l 512*14
  4883.  dc.l 512*14
  4884.  
  4885. widthleft: dc.w 0
  4886. scaleval: dc.w 0
  4887. sxoff: dc.l 0
  4888. szoff: dc.l 0
  4889. xoff34: dc.w 0
  4890. zoff34: dc.w 0
  4891. scosval: dc.w 0
  4892. ssinval: dc.w 0
  4893.  
  4894.  
  4895. floorsetbright:
  4896.  move.l #walltiles,a0
  4897.  
  4898. pastfloorbright
  4899.  
  4900.  
  4901.  move.w d0,d1
  4902.  muls cosval,d1    ; change in x across whole width
  4903.  move.w d0,d2
  4904.  muls sinval,d2    ; change in z across whole width
  4905.  neg.l d2
  4906. scaleprog:
  4907.  move.w scaleval(pc),d3
  4908.  beq.s .samescale
  4909.  bgt.s .scaledown
  4910.  neg.w d3
  4911.  asr.l d3,d1
  4912.  asr.l d3,d2
  4913.  bra.s .samescale
  4914. .scaledown:
  4915.  asl.l d3,d1
  4916.  asl.l d3,d2
  4917. .samescale
  4918.  
  4919.  move.l d1,d3 ;    z cos
  4920.  move.l d3,d6
  4921.  move.l d3,d5
  4922.  asr.l #1,d6
  4923.  add.l d6,d3
  4924.  asr.l #1,d3
  4925.  
  4926.  move.l d2,d4    ; z sin
  4927.  move.l d4,d6
  4928.  asr.l #1,d6
  4929.  add.l d4,d6
  4930.  add.l d3,d4
  4931.  neg.l d4    ; start x
  4932.  
  4933.  asr.l #1,d6    ; zsin/2
  4934.  sub.l d6,d5    ; start z
  4935.  
  4936.  add.l sxoff,d4
  4937.  add.l szoff,d5
  4938.  
  4939.  moveq #0,d6
  4940.  move.w leftedge(pc),d6
  4941.  beq.s nomultleft
  4942.  
  4943.  move.l d1,a4
  4944.  move.l d2,a5
  4945.  
  4946.  muls.l d6,d3:d1
  4947.  asr.l #6,d1
  4948.  add.l d1,d4
  4949.  
  4950.  muls.l d6,d3:d2
  4951.  asr.l #6,d2
  4952.  add.l d2,d5
  4953.  move.l a4,d1
  4954.  move.l a5,d2
  4955.  
  4956. nomultleft:
  4957.  
  4958.  move.w d4,startsmoothx
  4959.  move.w d5,startsmoothz
  4960.  
  4961.  swap d4
  4962.  asr.l #8,d5
  4963. ; add.w szoff,d5
  4964. ; add.w sxoff,d4
  4965.  and.w #63,d4
  4966.  and.w #63*256,d5
  4967.  move.b d4,d5
  4968.  
  4969.  asr.l #6,d1
  4970.  asr.l #6,d2
  4971.  move.w d1,a4
  4972.  move.w d2,a5
  4973.  asr.l #8,d2
  4974.  and.w #%0011111100000000,d2
  4975.  swap d1
  4976.  add.w d1,d2
  4977.  move.w #%11111100111111,d1
  4978.  and.w d1,d5
  4979.  swap d5
  4980.  move.w startsmoothz,d5
  4981.  swap d5
  4982.  swap d2
  4983.  move.w a5,d2
  4984.  swap d2
  4985.  
  4986. ***********************************
  4987.  
  4988.  move.w d6,a2
  4989.  move.l d2,d6
  4990.  add.w #256,d6
  4991.  
  4992.  moveq #0,d0
  4993.  
  4994.  tst.w a2
  4995.  beq startatleftedge
  4996.  
  4997.  move.w widthleft(pc),d4
  4998.  
  4999.  move.w rightedge(pc),d3
  5000.  
  5001.  cmp.w #31,a2
  5002.  bgt.s notinfirststrip
  5003.  lea (a3,a2.w*4),a3
  5004.  cmp.w #32,d3
  5005.  ble.s allinfirststrip
  5006.  move.w #32,d7
  5007.  sub.w d7,d3
  5008.  sub.w a2,d7
  5009.  bra intofirststrip
  5010.  
  5011. allinfirststrip
  5012.  sub.w a2,d3
  5013.  move.w d3,d7
  5014.  move.w #0,d4
  5015.  bra allintofirst
  5016.  
  5017. notinfirststrip:
  5018.  sub.w #32,a2
  5019.  sub.w #32,d3
  5020.  adda.w #33*4,a3
  5021.  cmp.w #31,a2
  5022.  bgt.s notstartinsec
  5023.  lea (a3,a2.w*4),a3
  5024.  cmp.w #32,d3
  5025.  ble.s allinsecstrip
  5026.  move.w #32,d7
  5027.  sub.w d7,d3
  5028.  sub.w a2,d7
  5029.  move.w d3,d4
  5030.  bra allintofirst
  5031.  
  5032. allinsecstrip
  5033.  sub.w a2,d3
  5034.  move.w d3,d7
  5035.  move.w #0,d4
  5036.  bra allintofirst
  5037.  rts
  5038.  
  5039. prot8: dc.w 0
  5040.  
  5041. notstartinsec:
  5042.  sub.w #32,a2
  5043.  sub.w #32,d3
  5044.  adda.w #33*4,a3
  5045.  lea (a3,a2.w*4),a3
  5046.  cmp.w #32,d3
  5047.  ble.s allinthirdstrip
  5048.  move.w #32,d7
  5049.  sub.w d7,d3
  5050.  sub.w a2,d7
  5051.  move.w d3,d4
  5052.  bra allintofirst
  5053.  rts
  5054.  
  5055. allinthirdstrip
  5056.  sub.w a2,d3
  5057.  move.w d3,d7
  5058.  move.w #0,d4
  5059.  bra allintofirst
  5060.  rts
  5061.  
  5062. startatleftedge:
  5063.  
  5064.  move.w rightedge(pc),d3
  5065.  sub.w a2,d3
  5066.  
  5067.  move.w d3,d7
  5068.  cmp.w #32,d7
  5069.  ble.s .notoowide
  5070.  move.w #32,d7
  5071. .notoowide:
  5072.  sub.w d7,d3
  5073. intofirststrip:
  5074.  
  5075.  move.w d3,d4
  5076. allintofirst:
  5077.  
  5078.  move.w startsmoothx,d3
  5079.  
  5080. tstwat:
  5081.  
  5082.  tst.b gourfloor
  5083.  bne gouraudfloor
  5084.  
  5085.  tst.b usewater
  5086.  bne texturedwater
  5087.  
  5088.  
  5089. ******************************
  5090. * BumpMap the floor/ceiling! *
  5091.  tst.b usebumps
  5092.  bne.s BumpMap
  5093. ******************************
  5094.  
  5095. ordinary:
  5096.  moveq #0,d0
  5097.  
  5098.  dbra d7,acrossscrn
  5099.  rts
  5100.  
  5101. usebumps: dc.w $0
  5102. smoothbumps: dc.w $0
  5103. gourfloor: dc.w 0
  5104.  
  5105.  include "ab3:source/bumpmap.s"
  5106.  
  5107.  CNOP 0,4
  5108. backbefore:
  5109.  and.w d1,d5
  5110.  move.b (a0,d5.w*4),d0
  5111.  add.w a4,d3
  5112.  move.w (a1,d0.w*2),(a3)
  5113.  addq #4,a3
  5114.  addx.l d6,d5
  5115.  dbcs d7,acrossscrn
  5116.  dbcc d7,backbefore
  5117.  bra.s past1
  5118.  
  5119. acrossscrn:
  5120.  and.w d1,d5
  5121.  move.b (a0,d5.w*4),d0
  5122.  add.w a4,d3
  5123.  move.w (a1,d0.w*2),(a3)
  5124.  addq #4,a3
  5125.  addx.l d2,d5
  5126.  dbcs d7,acrossscrn
  5127.  dbcc d7,backbefore
  5128. past1:
  5129.  bcc.s gotoacross
  5130.  
  5131.  move.w d4,d7
  5132.  bne.s .notdoneyet
  5133.  CACHE_FREEZE_ON d2
  5134.  rts
  5135. .notdoneyet:
  5136.  
  5137.  cmp.w #32,d7
  5138.  ble.s .notoowide
  5139.  move.w #32,d7
  5140. .notoowide
  5141.  sub.w d7,d4  
  5142.  addq #4,a3
  5143.  
  5144.  dbra d7,backbefore
  5145.  CACHE_FREEZE_ON d2
  5146.  rts
  5147.  
  5148.  
  5149. gotoacross:
  5150.  
  5151.  move.w d4,d7
  5152.  bne.s .notdoneyet
  5153.  CACHE_FREEZE_ON d2
  5154.  rts
  5155. .notdoneyet:
  5156.  
  5157.  cmp.w #32,d7
  5158.  ble.s .notoowide
  5159.  move.w #32,d7
  5160. .notoowide
  5161.  sub.w d7,d4  
  5162.  addq #4,a3
  5163.  
  5164.  dbra d7,acrossscrn
  5165.  CACHE_FREEZE_ON d2
  5166.  rts
  5167.  
  5168. leftbright: dc.l 0
  5169. brightspd: dc.l 0
  5170.  
  5171. gouraudfloor:
  5172.  move.l leftbright,d0
  5173.  move.l brightspd,d1
  5174.  dbra d7,acrossscrngour
  5175.  rts
  5176.  
  5177.  CNOP 0,4
  5178. backbeforegour:
  5179.  and.w #63*256+63,d5
  5180.  move.b (a0,d5.w*4),d0
  5181.  add.l d1,d0
  5182.  bcc.s .nomoreb
  5183.  add.w #256,d0
  5184. .nomoreb:
  5185.  add.w a4,d3
  5186.  move.w (a1,d0.w*2),(a3)
  5187.  addq #4,a3 
  5188.  addx.l d6,d5
  5189.  dbcs d7,acrossscrngour
  5190.  dbcc d7,backbeforegour
  5191.  bra.s past1gour
  5192.  
  5193. acrossscrngour:
  5194.  and.w #63*256+63,d5
  5195.  move.b (a0,d5.w*4),d0
  5196.  add.l d1,d0
  5197.  bcc.s .nomoreb
  5198.  add.w #256,d0
  5199. .nomoreb:
  5200.  add.w a4,d3
  5201.  move.w (a1,d0.w*2),(a3)
  5202.  addq #4,a3
  5203.  addx.l d2,d5
  5204.  dbcs d7,acrossscrngour
  5205.  dbcc d7,backbeforegour
  5206. past1gour:
  5207.  bcc.s gotoacrossgour
  5208.  
  5209.  move.w d4,d7
  5210.  bne.s .notdoneyet
  5211.  move.l d0,leftbright
  5212.  
  5213.  CACHE_FREEZE_ON d2
  5214.  rts
  5215. .notdoneyet:
  5216.  
  5217.  cmp.w #32,d7
  5218.  ble.s .notoowide
  5219.  move.w #32,d7
  5220. .notoowide
  5221.  sub.w d7,d4  
  5222.  addq #4,a3
  5223.  
  5224.  dbra d7,backbeforegour
  5225.  CACHE_FREEZE_ON d2
  5226.  rts
  5227.  
  5228.  
  5229. gotoacrossgour:
  5230.  
  5231.  move.w d4,d7
  5232.  bne.s .notdoneyet
  5233.  CACHE_FREEZE_ON d2
  5234.  rts
  5235. .notdoneyet:
  5236.  
  5237.  cmp.w #32,d7
  5238.  ble.s .notoowide
  5239.  move.w #32,d7
  5240. .notoowide
  5241.  sub.w d7,d4  
  5242.  addq #4,a3
  5243.  
  5244.  dbra d7,acrossscrngour
  5245.  CACHE_FREEZE_ON d2
  5246.  rts
  5247.  
  5248.  
  5249. waterpt: dc.l waterlist
  5250.  
  5251. waterlist:
  5252.  dc.l waterfile
  5253.  dc.l waterfile+2
  5254.  dc.l waterfile+256
  5255.  dc.l waterfile+256+2
  5256.  dc.l waterfile+512
  5257.  dc.l waterfile+512+2
  5258.  dc.l waterfile+768
  5259.  dc.l waterfile+768+2
  5260. ; dc.l waterfile+768
  5261. ; dc.l waterfile+512+2
  5262. ; dc.l waterfile+512
  5263. ; dc.l waterfile+256+2
  5264. ; dc.l waterfile+256
  5265. ; dc.l waterfile+2
  5266. endwaterlist:
  5267.  
  5268. watertouse: dc.l waterfile
  5269.  
  5270. wtan: dc.w 0
  5271. wateroff: dc.w 0
  5272.  
  5273. texturedwater:
  5274.  
  5275.  add.w wateroff,d5
  5276.  
  5277.  move.l #brightentab,a1
  5278.  move.w dst,d0
  5279.  clr.b d0
  5280.  add.w d0,d0
  5281.  adda.w d0,a1
  5282.  
  5283.  move.w dst,d0
  5284.  asl.w #7,d0
  5285.  add.w wtan,d0
  5286.  and.w #8191,d0
  5287.  move.l #SineTable,a0
  5288.  move.w (a0,d0.w),d0
  5289.  ext.l d0
  5290.  move.w dst,d3
  5291.  add.w #300,d3
  5292.  divs d3,d0
  5293.  asr.w #6,d0
  5294.  add.w #2,d0
  5295.  
  5296.  move.w dst,d3
  5297.  asr.w #7,d3
  5298.  add.w d3,d0
  5299.  
  5300.  muls #104*4,d0
  5301.  move.w d0,a6
  5302.  
  5303.  move.l watertouse,a0
  5304.  
  5305.  move.w startsmoothx,d3
  5306.  dbra d7,acrossscrnw
  5307.  rts
  5308.  
  5309. backbeforew:
  5310.  and.w d1,d5
  5311.  move.w (a0,d5.w*4),d0
  5312.  move.b 1(a3,a6.w),d0
  5313.  move.w (a1,d0.w*2),(a3)
  5314.  addq #4,a3
  5315.  add.w a4,d3
  5316.  addx.l d6,d5
  5317.  dbcs d7,acrossscrnw
  5318.  dbcc d7,backbeforew
  5319.  bcc.s past1w
  5320.  add.w #256,d5 
  5321.  bra.s past1w
  5322.  
  5323. acrossscrnw:
  5324.  and.w d1,d5
  5325.  move.w (a0,d5.w*4),d0
  5326.  move.b 1(a3,a6.w),d0
  5327.  move.w (a1,d0.w*2),(a3)
  5328.  addq #4,a3
  5329.  add.w a4,d3
  5330.  addx.l d2,d5
  5331.  dbcs d7,acrossscrnw
  5332.  dbcc d7,backbeforew
  5333.  bcc.s past1w
  5334.  add.w #256,d5 
  5335. past1w:
  5336.  
  5337.  move.w d4,d7
  5338.  bne.s .notdoneyet
  5339.  rts
  5340. .notdoneyet:
  5341.  
  5342.  cmp.w #32,d7
  5343.  ble.s .notoowide
  5344.  move.w #32,d7
  5345. .notoowide
  5346.  sub.w d7,d4  
  5347.  addq #4,a3
  5348.  
  5349.  dbra d7,acrossscrnw
  5350.  CACHE_FREEZE_ON d2
  5351.  rts
  5352.  
  5353. usewater: dc.w 0
  5354.  dc.w 0
  5355. startsmoothx: dc.w 0
  5356.  dc.w 0
  5357. startsmoothz: dc.w 0
  5358.  
  5359. ********************************
  5360. *
  5361.  include "AB3:source/ObjDraw3.chipram"
  5362. *
  5363. ********************************
  5364.  
  5365. numframes:
  5366.  dc.w 0
  5367.  
  5368. alframe: dc.l Objects+4096
  5369.  
  5370. alan:
  5371.  dcb.l 8,0
  5372.  dcb.l 8,1
  5373.  dcb.l 8,2
  5374.  dcb.l 8,3
  5375. endalan:
  5376.  
  5377. alanptr: dc.l alan
  5378.  
  5379. Time2: dc.l 0
  5380. dispco:
  5381.  dc.w 0
  5382.  
  5383. KInt_Init    ;VBR Assumed $0
  5384.         move.l $68.w,OLDKINT
  5385.         Move.l    #KInt_Main,$68.w    Install Interrupt 
  5386.         And.b    #$3f,$bfe201        Set Timers
  5387.         Move.b    #$7f,$bfed01
  5388.         Move.b    $bfed01,d0
  5389.         Move.b    #$88,$bfed01
  5390.         St.b    KInt_CCode        
  5391.         Move.b    #$a0,$bfee01        Start Timey Thing
  5392.         Rts                And return
  5393.  
  5394. OLDKINT: dc.l 0
  5395.  
  5396. KInt_Main    
  5397.         Movem.l    d0/d1/a0/a1/a6,-(a7)    Stack everything
  5398.         Move.w    #8,$dff09a        Temp Disable Int.
  5399.         Move.w    $dff01e,d0        Intreqr
  5400.         And.w    #8,d0            Mask Out All X^ K_Int
  5401.     Beq    KInt_End            Not Keyboard Interrupt
  5402.         Lea    $bfed01,a6
  5403.         Move.w    #$8,$dff09c        Clear Int.Request
  5404.         Move.b    -$100(a6),d0        Move Raw Keyboard value
  5405.         Ror.b    #1,d0            Roll to correct
  5406.         Not.b    d0            
  5407.         Move.b    d0,KInt_CCode        Save Corrected Keycode
  5408. .HandShake    Move.b    #8,(a6)
  5409.         Move.b    #7,-$900(a6)
  5410.         Move.b    #0,-$800(a6)
  5411.         Move.b    #0,-$100(a6)
  5412.         Move.b    #$d1,$100(a6)        
  5413.         Tst.b    (a6)    
  5414. .wait        Btst    #0,(a6)
  5415.     Beq.s    .wait
  5416.         Move.b    #$a0,$100(a6)        
  5417.         Move.b    (a6),d0        
  5418.         Move.b    #$88,(a6)
  5419.         Lea    KeyMap,a1
  5420.         Moveq.w    #0,d0
  5421.         Move.b    KInt_CCode(pc),d0
  5422.     Bmi.s    KInt_KeyUp            neg if up 
  5423.  
  5424. KInt_KeyDown
  5425.         st (a1,d0.w)
  5426.     Bra    KInt_End
  5427.  
  5428. KInt_KeyUp
  5429.         And.w    #$7f,d0            Make code Positive
  5430.         clr.b (a1,d0.w)
  5431. KInt_End    Movem.l    (a7)+,d0/d1/a0/a1/a6    Unstack Everything
  5432.     
  5433.         Move.w    #$8008,$dff09a        Re-enable Int.
  5434.         Rte
  5435.  
  5436. KInt_CCode    Ds.b    1
  5437. KInt_Askey    Ds.b    1
  5438. KInt_OCode    Ds.w    1
  5439.  
  5440.  
  5441. OldSpace: dc.b 0
  5442. SpaceTapped: dc.b 0
  5443. PLR1_SPCTAP: dc.b 0
  5444. PLR2_SPCTAP: dc.b 0
  5445. PLR1_Ducked: dc.b 0
  5446. PLR2_Ducked: dc.b 0
  5447.  even
  5448.  
  5449.  include "ab3:source/PLR1CONTROL.s"
  5450.  include "ab3:source/PLR2CONTROL.s"
  5451.  
  5452. prot7: dc.w 0
  5453.  
  5454. GOTTOSEND: dc.w 0
  5455.  
  5456. OtherInter:
  5457.  move.w #$0010,$dff000+intreq
  5458.  movem.l d0-d7/a0-a6,-(a7)
  5459.  bra.s justshake
  5460.  
  5461. Chan0inter:
  5462.  
  5463.  move.w #$0010,$dff000+intreq
  5464.  
  5465.  tst.b doanything
  5466.  bne.s dosomething
  5467.  rte
  5468.  
  5469. dosomething:
  5470.  
  5471.  
  5472.  addq.w #1,FramesToDraw
  5473.  movem.l d0-d7/a0-a6,-(a7)
  5474.  
  5475. ; jsr INITREC
  5476. ; jsr RECEIVE
  5477.  
  5478. ; tst.l BUFFER
  5479. ; beq.s justshake
  5480. ; st GOTTOSEND
  5481. ; move.l #OtherInter,$6c
  5482.  
  5483. justshake:
  5484.  
  5485.  cmp.b #'b',Prefsfile+3
  5486.  bne.s .noback
  5487.  jsr mt_music
  5488. .noback:
  5489.  
  5490.  bra dontshowtime
  5491.  
  5492.  tst.b oktodisplay
  5493.  beq dontshowtime
  5494.  clr.b oktodisplay
  5495.  subq.w #1,dispco
  5496.  bgt dontshowtime
  5497.  move.w #10,dispco
  5498.  
  5499.  move.l #TimerScr+10,a0
  5500.  move.l TimeCount,d0
  5501.  bge.s timenotneg
  5502.  move.l #1111*256,d0
  5503. timenotneg:
  5504.  asr.l #8,d0
  5505.  move.l #digits,a1
  5506.  move.w #7,d2
  5507. digitlop
  5508.  divs #10,d0
  5509.  swap d0
  5510.  lea (a1,d0.w*8),a2
  5511.  move.b (a2)+,(a0)
  5512.  move.b (a2)+,24(a0)
  5513.  move.b (a2)+,24*2(a0)
  5514.  move.b (a2)+,24*3(a0)
  5515.  move.b (a2)+,24*4(a0)
  5516.  move.b (a2)+,24*5(a0)
  5517.  move.b (a2)+,24*6(a0)
  5518.  move.b (a2)+,24*7(a0)
  5519.  subq #1,a0
  5520.  swap d0
  5521.  ext.l d0
  5522.  dbra d2,digitlop
  5523.  
  5524.  move.l #TimerScr+10+24*10,a0
  5525.  move.l NumTimes,d0
  5526.  move.l #digits,a1
  5527.  move.w #3,d2
  5528. digitlop2
  5529.  divs #10,d0
  5530.  swap d0
  5531.  lea (a1,d0.w*8),a2
  5532.  move.b (a2)+,(a0)
  5533.  move.b (a2)+,24(a0)
  5534.  move.b (a2)+,24*2(a0)
  5535.  move.b (a2)+,24*3(a0)
  5536.  move.b (a2)+,24*4(a0)
  5537.  move.b (a2)+,24*5(a0)
  5538.  move.b (a2)+,24*6(a0)
  5539.  move.b (a2)+,24*7(a0)
  5540.  subq #1,a0
  5541.  swap d0
  5542.  ext.l d0
  5543.  dbra d2,digitlop2
  5544.  
  5545.  move.l #TimerScr+10+24*20,a0
  5546.  moveq #0,d0
  5547.  move.w FramesToDraw,d0
  5548.  move.l #digits,a1
  5549.  move.w #2,d2
  5550. digitlop3
  5551.  divs #10,d0
  5552.  swap d0
  5553.  lea (a1,d0.w*8),a2
  5554.  move.b (a2)+,(a0)
  5555.  move.b (a2)+,24(a0)
  5556.  move.b (a2)+,24*2(a0)
  5557.  move.b (a2)+,24*3(a0)
  5558.  move.b (a2)+,24*4(a0)
  5559.  move.b (a2)+,24*5(a0)
  5560.  move.b (a2)+,24*6(a0)
  5561.  move.b (a2)+,24*7(a0)
  5562.  subq #1,a0
  5563.  swap d0
  5564.  ext.l d0
  5565.  dbra d2,digitlop3
  5566.  
  5567. dontshowtime:
  5568.  
  5569.  move.w Robotanimpos,d0
  5570.  add.w #6*38,d0
  5571.  cmp.w #6*38*64,d0
  5572.  blt.s norebot
  5573.  move.w #0,d0
  5574. norebot:
  5575.  move.w d0,Robotanimpos
  5576.  
  5577.  tst.w d0
  5578.  seq d1
  5579.  cmp.w #6*32*38,d0
  5580.  seq d2
  5581.  or.b d2,d1
  5582.  or.b d1,clump
  5583.  
  5584.  move.w Robotarmpos,d0
  5585.  add.w #6*14,d0
  5586.  cmp.w #6*14*64,d0
  5587.  blt.s norebot2
  5588.  move.w #0,d0
  5589. norebot2:
  5590.  move.w d0,Robotarmpos
  5591.  
  5592.  move.l alanptr,a0
  5593.  move.l (a0)+,alframe
  5594.  cmp.l #endalan,a0
  5595.  blt.s nostartalan
  5596.  move.l #alan,a0
  5597. nostartalan:
  5598.  move.l a0,alanptr
  5599.  
  5600.  move.l #$dff000,a6
  5601.  
  5602.  cmp.b #'4',Prefsfile+1
  5603.  bne.s nomuckabout
  5604.  
  5605.  move.w #$0,d0 
  5606.  tst.b NoiseMade0LEFT
  5607.  beq.s noturnoff0
  5608.  move.w #1,d0
  5609. noturnoff0:
  5610.  tst.b NoiseMade0RIGHT
  5611.  beq.s noturnoff1
  5612.  or.w #2,d0
  5613. noturnoff1:
  5614.  tst.b NoiseMade1RIGHT
  5615.  beq.s noturnoff2
  5616.  or.w #4,d0
  5617. noturnoff2:
  5618.  tst.b NoiseMade1LEFT
  5619.  beq.s noturnoff3
  5620.  or.w #8,d0
  5621. noturnoff3:
  5622.  move.w d0,dmacon(a6)
  5623.  
  5624. nomuckabout:
  5625.  
  5626.  tst.b READCONTROLS
  5627.  beq.s nocontrols
  5628.  
  5629.  cmp.b #'s',mors
  5630.  beq.s control2
  5631.  
  5632.  tst.b PLR1MOUSE
  5633.  beq.s PLR1_nomouse
  5634.  bsr PLR1_mouse_control
  5635. PLR1_nomouse:
  5636.  tst.b PLR1KEYS
  5637.  beq.s PLR1_nokeys
  5638.  bsr PLR1_keyboard_control
  5639. PLR1_nokeys:
  5640. ; tst.b PLR1PATH
  5641. ; beq.s PLR1_nopath
  5642. ; bsr PLR1_follow_path
  5643. ;PLR1_nopath:
  5644.  tst.b PLR1JOY
  5645.  beq.s PLR1_nojoy
  5646.  bsr PLR1_JoyStick_control
  5647. PLR1_nojoy: 
  5648.  bra.s nocontrols
  5649.  
  5650. control2:
  5651.  tst.b PLR2MOUSE
  5652.  beq.s PLR2_nomouse
  5653.  bsr PLR2_mouse_control
  5654. PLR2_nomouse:
  5655.  tst.b PLR2KEYS
  5656.  beq.s PLR2_nokeys
  5657.  bsr PLR2_keyboard_control
  5658. PLR2_nokeys:
  5659. ; tst.b PLR2PATH
  5660. ; beq.s PLR2_nopath
  5661. ; bsr PLR1_follow_path
  5662. ;PLR2_nopath:
  5663.  tst.b PLR2JOY
  5664.  beq.s PLR2_nojoy
  5665.  bsr PLR2_JoyStick_control
  5666. PLR2_nojoy: 
  5667.  
  5668.  
  5669. nocontrols:
  5670.  
  5671. ; tst.b PLR2_fire
  5672. ; beq.s firenotpressed2
  5673. ; fire was pressed last time.
  5674. ; btst #7,$bfe001
  5675. ; bne.s firenownotpressed2
  5676. ; fire is still pressed this time.
  5677. ; st PLR2_fire
  5678. ; bra dointer
  5679.  
  5680. firenownotpressed2:
  5681. ; fire has been released.
  5682. ; clr.b PLR2_fire
  5683. ; bra dointer
  5684.  
  5685. firenotpressed2
  5686.  
  5687. ; fire was not pressed last frame...
  5688.  
  5689. ; btst #7,$bfe001
  5690. ; if it has still not been pressed, go back above
  5691. ; bne.s firenownotpressed2
  5692. ; fire was not pressed last time, and was this time, so has
  5693. ; been clicked.
  5694. ; st PLR2_clicked
  5695. ; st PLR2_fire
  5696.  
  5697. dointer
  5698.  
  5699.  cmp.b #'4',Prefsfile+1
  5700.  beq fourchannel
  5701.  
  5702.  btst #1,$dff000+intreqr
  5703.  bne.s newsampbitl
  5704.  
  5705.  movem.l (a7)+,d0-d7/a0-a6
  5706.  
  5707.  rte
  5708.  
  5709.  
  5710. swappedem: dc.w 0
  5711.  
  5712. newsampbitl:
  5713.  
  5714.  move.w #$820f,$dff000+dmacon
  5715.  
  5716.  move.w #$200,$dff000+intreq
  5717.  
  5718. ; tst.b CHANNELDATA
  5719. ; bne nochannel0
  5720.  
  5721.  move.l pos0LEFT,a0
  5722.  move.l pos2LEFT,a1
  5723.  
  5724.  move.l #tab,a2
  5725.  
  5726.  moveq #0,d0
  5727.  moveq #0,d1
  5728.  move.b vol0left,d0
  5729.  move.b vol2left,d1
  5730.  cmp.b d1,d0
  5731.  slt swappedem
  5732.  bge.s fbig0
  5733.  
  5734. ; d1 is bigger so scale d0 and use d1
  5735. ; as audiochannel volume.
  5736.  
  5737.  exg a0,a1
  5738.  asl.w #6,d0
  5739.  divs d1,d0
  5740.  lsl.w #8,d0
  5741.  adda.w d0,a2
  5742.  move.w d1,$dff0a8
  5743.  bra.s donechan0
  5744.  
  5745. fbig0:
  5746.  tst.w d0
  5747.  beq.s donechan0
  5748.  asl.w #6,d1
  5749.  divs d0,d1
  5750.  lsl.w #8,d1
  5751.  adda.w d1,a2
  5752.  move.w d0,$dff0a8
  5753.  
  5754. donechan0:
  5755.  
  5756.  move.l Aupt0,a3
  5757.  move.l a3,$dff0a0
  5758.  move.l Auback0,Aupt0
  5759.  move.l a3,Auback0
  5760.  
  5761.  move.l Auback0,a3
  5762.  
  5763.  moveq #0,d0
  5764.  moveq #0,d1
  5765.  moveq #0,d2
  5766.  moveq #0,d3
  5767.  moveq #0,d4
  5768.  moveq #0,d5
  5769.  move.w #49,d7
  5770. loop:
  5771.  move.l (a0)+,d0
  5772.  move.b (a1)+,d1
  5773.  move.b (a1)+,d2
  5774.  move.b (a1)+,d3
  5775.  move.b (a1)+,d4
  5776.  move.b (a2,d3.w),d5
  5777.  swap d5
  5778.  move.b (a2,d1.w),d5
  5779.  asl.l #8,d5
  5780.  move.b (a2,d2.w),d5
  5781.  swap d5
  5782.  move.b (a2,d4.w),d5
  5783.  add.l d5,d0
  5784.  move.l d0,(a3)+
  5785.  dbra d7,loop
  5786.  
  5787.  tst.b swappedem
  5788.  beq.s .ok23
  5789.  exg a0,a1
  5790. .ok23:
  5791.  
  5792.  cmp.l Samp0endLEFT,a0
  5793.  blt.s .notoffendsamp1
  5794.  move.l #bass,a0
  5795.  move.l #bassend,Samp0endLEFT
  5796.  move.b #63,vol0left
  5797.  st LEFTCHANDATA+1
  5798.  move.w #0,LEFTCHANDATA+2
  5799. .notoffendsamp1:
  5800.  
  5801.  cmp.l Samp2endLEFT,a1
  5802.  blt.s .notoffendsamp2
  5803.  move.l #empty,a1
  5804.  move.l #emptyend,Samp2endLEFT
  5805.  move.b #0,vol2left
  5806.  st LEFTCHANDATA+1+8
  5807.  move.w #0,LEFTCHANDATA+2+8
  5808. .notoffendsamp2:
  5809.  
  5810.  move.l a0,pos0LEFT
  5811.  move.l a1,pos2LEFT
  5812.  
  5813. nochannel0:
  5814.  
  5815.  tst.b CHANNELDATA+16
  5816.  bne nochannel1
  5817.  
  5818.  
  5819.  move.l pos0RIGHT,a0
  5820.  move.l pos2RIGHT,a1
  5821.  
  5822.  move.l Aupt1,a3
  5823.  move.l a3,$dff0b0
  5824.  move.l Auback1,Aupt1
  5825.  move.l a3,Auback1
  5826.  
  5827.  move.l #tab,a2
  5828.  
  5829.  moveq #0,d0
  5830.  moveq #0,d1
  5831.  move.b vol0right,d0
  5832.  move.b vol2right,d1
  5833.  cmp.b d1,d0
  5834.  slt swappedem
  5835.  bge.s fbig1
  5836.  
  5837. ; d1 is bigger so scale d0 and use d1
  5838. ; as audiochannel volume.
  5839.  
  5840.  exg a0,a1
  5841.  asl.w #6,d0
  5842.  divs d1,d0
  5843.  lsl.w #8,d0
  5844.  adda.w d0,a2
  5845.  move.w d1,$dff0b8
  5846.  bra.s donechan1
  5847.  
  5848. fbig1:
  5849.  tst.w d0
  5850.  beq.s donechan1
  5851.  asl.w #6,d1
  5852.  divs d0,d1
  5853.  lsl.w #8,d1
  5854.  adda.w d1,a2
  5855.  move.w d0,$dff0b8
  5856.  
  5857. donechan1:
  5858.  moveq #0,d0
  5859.  moveq #0,d1
  5860.  moveq #0,d2
  5861.  moveq #0,d3
  5862.  moveq #0,d4
  5863.  moveq #0,d5
  5864.  move.w #49,d7
  5865. loop2:
  5866.  move.l (a0)+,d0
  5867.  move.b (a1)+,d1
  5868.  move.b (a1)+,d2
  5869.  move.b (a1)+,d3
  5870.  move.b (a1)+,d4
  5871.  move.b (a2,d3.w),d5
  5872.  swap d5
  5873.  move.b (a2,d1.w),d5
  5874.  asl.l #8,d5
  5875.  move.b (a2,d2.w),d5
  5876.  swap d5
  5877.  move.b (a2,d4.w),d5
  5878.  add.l d5,d0
  5879.  move.l d0,(a3)+
  5880.  dbra d7,loop2
  5881.  
  5882.  tst.b swappedem
  5883.  beq.s ok01
  5884.  exg a0,a1
  5885. ok01:
  5886.  
  5887.  cmp.l Samp0endRIGHT,a0
  5888.  blt.s .notoffendsamp1
  5889.  move.l #empty,a0
  5890.  move.l #emptyend,Samp0endRIGHT
  5891.  move.b #0,vol0right
  5892.  st RIGHTCHANDATA+1
  5893.  move.w #0,RIGHTCHANDATA+2
  5894. .notoffendsamp1:
  5895.  
  5896.  cmp.l Samp2endRIGHT,a1
  5897.  blt.s .notoffendsamp2
  5898.  move.l #empty,a1
  5899.  move.l #emptyend,Samp2endRIGHT
  5900.  move.b #0,vol2right
  5901.  st RIGHTCHANDATA+1+8
  5902.  move.w #0,RIGHTCHANDATA+2+8
  5903. .notoffendsamp2:
  5904.  
  5905.  move.l a0,pos0RIGHT
  5906.  move.l a1,pos2RIGHT
  5907.  
  5908. nochannel1:
  5909.  
  5910. ******************* Other two channels
  5911.  
  5912.  move.l pos1LEFT,a0
  5913.  move.l pos3LEFT,a1
  5914.  
  5915.  move.l #tab,a2
  5916.  
  5917.  moveq #0,d0
  5918.  moveq #0,d1
  5919.  move.b vol1left,d0
  5920.  move.b vol3left,d1
  5921.  cmp.b d1,d0
  5922.  slt swappedem
  5923.  bge.s fbig2
  5924.  
  5925. ; d1 is bigger so scale d0 and use d1
  5926. ; as audiochannel volume.
  5927.  
  5928.  exg a0,a1
  5929.  asl.w #6,d0
  5930.  divs d1,d0
  5931.  lsl.w #8,d0
  5932.  adda.w d0,a2
  5933.  move.w d1,$dff0d8
  5934.  bra.s donechan2
  5935.  
  5936. fbig2:
  5937.  tst.w d0
  5938.  beq.s donechan2
  5939.  asl.w #6,d1
  5940.  divs d0,d1
  5941.  lsl.w #8,d1
  5942.  adda.w d1,a2
  5943.  move.w d0,$dff0d8
  5944.  
  5945. donechan2:
  5946.  
  5947.  move.l Aupt2,a3
  5948.  move.l a3,$dff0d0
  5949.  move.l Auback2,Aupt2
  5950.  move.l a3,Auback2
  5951.  
  5952.  moveq #0,d0
  5953.  moveq #0,d1
  5954.  moveq #0,d2
  5955.  moveq #0,d3
  5956.  moveq #0,d4
  5957.  moveq #0,d5
  5958.  move.w #49,d7
  5959. loop3:
  5960.  move.l (a0)+,d0
  5961.  move.b (a1)+,d1
  5962.  move.b (a1)+,d2
  5963.  move.b (a1)+,d3
  5964.  move.b (a1)+,d4
  5965.  move.b (a2,d3.w),d5
  5966.  swap d5
  5967.  move.b (a2,d1.w),d5
  5968.  asl.l #8,d5
  5969.  move.b (a2,d2.w),d5
  5970.  swap d5
  5971.  move.b (a2,d4.w),d5
  5972.  add.l d5,d0
  5973.  move.l d0,(a3)+
  5974.  dbra d7,loop3
  5975.  
  5976.  tst.b swappedem
  5977.  beq.s .ok23
  5978.  exg a0,a1
  5979. .ok23:
  5980.  
  5981.  cmp.l Samp1endLEFT,a0
  5982.  blt.s .notoffendsamp3
  5983.  move.l #empty,a0
  5984.  move.l #emptyend,Samp1endLEFT
  5985.  move.b #0,vol1left
  5986.  st LEFTCHANDATA+1+4
  5987.  move.w #0,LEFTCHANDATA+2+4
  5988. .notoffendsamp3:
  5989.  
  5990.  cmp.l Samp3endLEFT,a1
  5991.  blt.s .notoffendsamp4
  5992.  move.l #empty,a1
  5993.  move.l #emptyend,Samp3endLEFT
  5994.  move.b #0,vol3left
  5995.  st LEFTCHANDATA+1+12
  5996.  move.w #0,LEFTCHANDATA+2+12
  5997. .notoffendsamp4:
  5998.  
  5999.  move.l a0,pos1LEFT
  6000.  move.l a1,pos3LEFT
  6001.  
  6002.  move.l pos1RIGHT,a0
  6003.  move.l pos3RIGHT,a1
  6004.  
  6005.  move.l Aupt3,a3
  6006.  move.l a3,$dff0c0
  6007.  move.l Auback3,Aupt3
  6008.  move.l a3,Auback3
  6009.  
  6010.  move.l #tab,a2
  6011.  
  6012.  moveq #0,d0
  6013.  moveq #0,d1
  6014.  move.b vol1right,d0
  6015.  move.b vol3right,d1
  6016.  cmp.b d1,d0
  6017.  slt.s swappedem
  6018.  bge.s fbig3
  6019.  
  6020.  exg a0,a1
  6021.  asl.w #6,d0
  6022.  divs d1,d0
  6023.  lsl.w #8,d0
  6024.  adda.w d0,a2
  6025.  move.w d1,$dff0c8
  6026.  bra.s donechan3
  6027.  
  6028. fbig3:
  6029.  tst.w d0
  6030.  beq.s donechan3
  6031.  asl.w #6,d1
  6032.  divs d0,d1
  6033.  lsl.w #8,d1
  6034.  adda.w d1,a2
  6035.  move.w d0,$dff0c8
  6036. donechan3:
  6037.  
  6038.  moveq #0,d0
  6039.  moveq #0,d1
  6040.  moveq #0,d2
  6041.  moveq #0,d3
  6042.  moveq #0,d4
  6043.  moveq #0,d5
  6044.  move.w #49,d7
  6045. loop4:
  6046.  move.l (a0)+,d0
  6047.  move.b (a1)+,d1
  6048.  move.b (a1)+,d2
  6049.  move.b (a1)+,d3
  6050.  move.b (a1)+,d4
  6051.  move.b (a2,d3.w),d5
  6052.  swap d5
  6053.  move.b (a2,d1.w),d5
  6054.  asl.l #8,d5
  6055.  move.b (a2,d2.w),d5
  6056.  swap d5
  6057.  move.b (a2,d4.w),d5
  6058.  add.l d5,d0
  6059.  move.l d0,(a3)+
  6060.  dbra d7,loop4
  6061.  
  6062.  tst.b swappedem
  6063.  beq.s .ok23
  6064.  exg a0,a1
  6065. .ok23:
  6066.  
  6067.  cmp.l Samp1endRIGHT,a0
  6068.  blt.s notoffendsamp3
  6069.  move.l #empty,a0
  6070.  move.l #emptyend,Samp1endRIGHT
  6071.  move.b #0,vol1right
  6072.  st RIGHTCHANDATA+1+4
  6073.  move.w #0,RIGHTCHANDATA+2+4
  6074. notoffendsamp3:
  6075.  
  6076.  cmp.l Samp3endRIGHT,a1
  6077.  blt.s notoffendsamp4
  6078.  move.l #empty,a1
  6079.  move.l #emptyend,Samp3endRIGHT
  6080.  move.b #0,vol3right
  6081.  st RIGHTCHANDATA+1+12
  6082.  move.w #0,RIGHTCHANDATA+2+12
  6083. notoffendsamp4:
  6084.  
  6085.  move.l a0,pos1RIGHT
  6086.  move.l a1,pos3RIGHT
  6087.  
  6088.  movem.l (a7)+,d0-d7/a0-a6
  6089.  tst.b counting
  6090.  beq .nostartcounter
  6091.  JSR STARTCOUNT
  6092. .nostartcounter:
  6093.  
  6094.  rte
  6095.  
  6096. ***********************************
  6097. * 4 channel sound routine
  6098. ***********************************
  6099.  
  6100. fourchannel:
  6101.  
  6102.  
  6103.  
  6104.  move.l #$dff000,a6
  6105.  
  6106.  btst #7,intreqrl(a6)
  6107.  beq.s nofinish0
  6108.  move.w #0,LEFTCHANDATA+2
  6109.  st LEFTCHANDATA+1
  6110.  move.l #bass,$a0(a6)
  6111.  move.w #18370/2,$a4(a6) 
  6112.  move.w #$0080,intreq(a6)
  6113. nofinish0:
  6114.  
  6115.  tst.b NoiseMade0pLEFT
  6116.  beq.s NoChan0sound
  6117.  
  6118.  move.l Samp0endLEFT,d0
  6119.  move.l pos0LEFT,d1
  6120.  sub.l d1,d0
  6121.  lsr.l #1,d0
  6122.  move.w d0,$a4(a6)
  6123.  move.l d1,$a0(a6)
  6124.  move.w #$8201,dmacon(a6)
  6125.  moveq #0,d0
  6126.  move.b vol0left,d0
  6127.  move.w d0,$a8(a6)
  6128.  
  6129. NoChan0sound:
  6130.  
  6131. *****************************************
  6132. *****************************************
  6133.  
  6134.  btst #0,intreqr(a6)
  6135.  beq.s nofinish1
  6136.  move.l #null,$b0(a6)
  6137.  move.w #100,$b4(a6)
  6138.  move.w #$0100,intreq(a6)
  6139. nofinish1:
  6140.  
  6141.  tst.b NoiseMade0pRIGHT
  6142.  beq.s NoChan1sound
  6143.  
  6144.  move.l Samp0endRIGHT,d0
  6145.  move.l pos0RIGHT,d1
  6146.  sub.l d1,d0
  6147.  lsr.l #1,d0
  6148.  move.w d0,$b4(a6)
  6149.  move.l d1,$b0(a6)
  6150.  move.w d0,playnull1
  6151.  move.w #$8202,dmacon(a6)
  6152.  moveq #0,d0
  6153.  move.b vol0right,d0
  6154.  move.w d0,$b8(a6)
  6155.  
  6156. NoChan1sound:
  6157.  
  6158. *****************************************
  6159. *****************************************
  6160.  
  6161.  btst #1,intreqr(a6)
  6162.  beq.s nofinish2
  6163.  move.l #null,$c0(a6)
  6164.  move.w #100,$c4(a6)
  6165.  move.w #$0200,intreq(a6)
  6166. nofinish2:
  6167.  
  6168.  tst.b NoiseMade1pRIGHT
  6169.  beq.s NoChan2sound
  6170.  
  6171.  move.l Samp1endRIGHT,d0
  6172.  move.l pos1RIGHT,d1
  6173.  sub.l d1,d0
  6174.  lsr.l #1,d0
  6175.  move.w d0,$c4(a6)
  6176.  move.w d0,playnull2
  6177.  
  6178.  move.l d1,$c0(a6)
  6179.  move.w #$8204,dmacon(a6)
  6180.  moveq #0,d0
  6181.  move.b vol1right,d0
  6182.  move.w d0,$c8(a6)
  6183.  
  6184. NoChan2sound:
  6185.  
  6186. *****************************************
  6187. *****************************************
  6188.  
  6189.  btst #2,intreqr(a6)
  6190.  beq.s nofinish3
  6191.  move.l #null,$d0(a6)
  6192.  move.w #100,$d4(a6)
  6193.  move.w #$0400,intreq(a6)
  6194. nofinish3:
  6195.  
  6196.  tst.b NoiseMade1pLEFT
  6197.  beq.s NoChan3sound
  6198.  
  6199.  move.l Samp1endLEFT,d0
  6200.  move.l pos1LEFT,d1
  6201.  sub.l d1,d0
  6202.  lsr.l #1,d0
  6203.  move.w d0,$d4(a6)
  6204.  move.w d0,playnull3
  6205.  move.l d1,$d0(a6)
  6206.  move.w #$8208,dmacon(a6)
  6207.  moveq #0,d0
  6208.  move.b vol1left,d0
  6209.  move.w d0,$d8(a6)
  6210.  
  6211. NoChan3sound:
  6212.  
  6213. nomorechannels:
  6214.  
  6215.  move.l NoiseMade0LEFT,NoiseMade0pLEFT
  6216.  move.l #0,NoiseMade0LEFT
  6217.  move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
  6218.  move.l #0,NoiseMade0RIGHT
  6219.  
  6220.  
  6221. ; tst.b playnull0
  6222. ; beq.s .nnul
  6223. ; sub.b #1,playnull0
  6224. ; bra.s chan0still
  6225. ;.nnul:
  6226. ;chan0still:
  6227.  
  6228.  tst.b NoiseMade0pRIGHT
  6229.  bne.s chan1still
  6230.  tst.w playnull1
  6231.  beq.s nnul1
  6232.  sub.w #100,playnull1
  6233.  bra.s chan1still
  6234. nnul1:
  6235.  move.w #0,RIGHTCHANDATA+2
  6236.  st RIGHTCHANDATA+1
  6237. chan1still:
  6238.  
  6239.  tst.b NoiseMade1pRIGHT
  6240.  bne.s chan2still
  6241.  tst.w playnull2
  6242.  beq.s nnul2
  6243.  sub.w #100,playnull2
  6244.  bra.s chan2still
  6245. nnul2:
  6246.  move.w #0,RIGHTCHANDATA+2+4
  6247.  st RIGHTCHANDATA+1+4
  6248. chan2still:
  6249.  
  6250.  tst.b NoiseMade1pLEFT
  6251.  bne.s chan3still
  6252.  tst.w playnull3
  6253.  beq.s nnul3
  6254.  sub.w #100,playnull3
  6255.  bra.s chan3still
  6256. nnul3:
  6257.  move.w #0,LEFTCHANDATA+2+4
  6258.  st LEFTCHANDATA+1+4
  6259.  
  6260. chan3still:
  6261.  
  6262.  
  6263.  movem.l (a7)+,d0-d7/a0-a6
  6264.  tst.b counting
  6265.  beq .nostartcounter
  6266.  JSR STARTCOUNT
  6267. .nostartcounter:
  6268.  
  6269.  rte
  6270.  
  6271. backbeat: dc.w 0
  6272.  
  6273. playnull0: dc.w 0
  6274. playnull1: dc.w 0
  6275. playnull2: dc.w 0
  6276. playnull3: dc.w 0
  6277.  
  6278. Samp0endRIGHT: dc.l emptyend
  6279. Samp1endRIGHT: dc.l emptyend
  6280. Samp2endRIGHT: dc.l emptyend
  6281. Samp3endRIGHT: dc.l emptyend
  6282. Samp0endLEFT: dc.l emptyend
  6283. Samp1endLEFT: dc.l emptyend
  6284. Samp2endLEFT: dc.l emptyend
  6285. Samp3endLEFT: dc.l emptyend
  6286.  
  6287. Aupt0: dc.l null
  6288. Auback0: dc.l null+500
  6289. Aupt2: dc.l null3
  6290. Auback2: dc.l null3+500
  6291. Aupt3: dc.l null4
  6292. Auback3: dc.l null4+500
  6293. Aupt1: dc.l null2
  6294. Auback1: dc.l null2+500
  6295.  
  6296. NoiseMade0LEFT: dc.b 0
  6297. NoiseMade1LEFT: dc.b 0
  6298. NoiseMade2LEFT: dc.b 0
  6299. NoiseMade3LEFT: dc.b 0
  6300. NoiseMade0pLEFT: dc.b 0
  6301. NoiseMade1pLEFT: dc.b 0
  6302. NoiseMade2pLEFT: dc.b 0
  6303. NoiseMade3pLEFT: dc.b 0
  6304. NoiseMade0RIGHT: dc.b 0
  6305. NoiseMade1RIGHT: dc.b 0
  6306. NoiseMade2RIGHT: dc.b 0
  6307. NoiseMade3RIGHT: dc.b 0
  6308. NoiseMade0pRIGHT: dc.b 0
  6309. NoiseMade1pRIGHT: dc.b 0
  6310. NoiseMade2pRIGHT: dc.b 0
  6311. NoiseMade3pRIGHT: dc.b 0
  6312.  
  6313. empty: ds.l 100
  6314. emptyend:
  6315.  
  6316. **************************************
  6317. * I want a routine to calculate all the
  6318. * info needed for the sound player to
  6319. * work, given say position of noise, volume
  6320. * and sample number.
  6321.  
  6322. Samplenum: dc.w 0
  6323. Noisex: dc.w 0
  6324. Noisez: dc.w 0
  6325. Noisevol: dc.w 0
  6326. chanpick: dc.w 0
  6327. IDNUM: dc.w 0
  6328. needleft: dc.b 0
  6329. needright: dc.b 0
  6330. STEREO: dc.b $0
  6331. even
  6332. prot6: dc.w 0
  6333.  
  6334.  even
  6335.  
  6336. CHANNELDATA:
  6337. LEFTCHANDATA:
  6338.  dc.l $FF000000
  6339.  dc.l $00000000
  6340.  dc.l $FF000000
  6341.  dc.l $FF000000
  6342. RIGHTCHANDATA:
  6343.  dc.l $00000000
  6344.  dc.l $00000000
  6345.  dc.l $FF000000
  6346.  dc.l $FF000000
  6347.  
  6348. RIGHTPLAYEDTAB: ds.l 20
  6349. LEFTPLAYEDTAB: ds.l 20
  6350.  
  6351. MakeSomeNoise:
  6352.  
  6353. ; Plan for new sound handler:
  6354. ; It is sent a sample number,
  6355. ; a position relative to the
  6356. ; player, an id number and a volume.
  6357. ; Also notifplaying.
  6358.  
  6359. ; indirect inputs are the available
  6360. ; channel flags and whether or not
  6361. ; stereo sound is selected.
  6362.  
  6363. ; the algorithm must decide
  6364. ; whether the new sound is more
  6365. ; important than the ones already
  6366. ; playing. Thus an 'importance'
  6367. ; must be calculated, probably
  6368. ; using volume.
  6369.  
  6370. ; The output needs to be:
  6371.  
  6372. ; Write the pointers and volumes of
  6373. ; the sound channels
  6374.  
  6375.  
  6376.  tst.b notifplaying
  6377.  beq.s dontworry
  6378.  
  6379. ; find if we are already playing
  6380.  
  6381.  move.b IDNUM,d0
  6382.  move.w #7,d1
  6383.  lea CHANNELDATA,a3
  6384. findsameasme
  6385.  tst.b (a3)
  6386.  bne.s notavail
  6387.  cmp.b 1(a3),d0
  6388.  beq SameAsMe
  6389. notavail:
  6390.  add.w #4,a3
  6391.  dbra d1,findsameasme
  6392.  bra dontworry
  6393. SameAsMe
  6394.  rts
  6395.  
  6396. dontworry:
  6397.  
  6398. ; Ok its fine for us to play a sound.
  6399. ; So calculate left/right volume.
  6400.  
  6401.  move.w Noisex,d1
  6402.  muls d1,d1
  6403.  move.w Noisez,d2
  6404.  muls d2,d2
  6405.  move.w #64,d3
  6406.  moveq #1,d0
  6407.  add.l d1,d2
  6408.  beq pastcalc
  6409.  
  6410.  move.w #31,d0
  6411. .findhigh
  6412.  btst d0,d2
  6413.  bne .foundhigh
  6414.  dbra d0,.findhigh
  6415. .foundhigh
  6416.  asr.w #1,d0
  6417.  clr.l d3
  6418.  bset d0,d3
  6419.  move.l d3,d0
  6420.  
  6421.  move.w d0,d3
  6422.  muls d3,d3    ; x*x
  6423.  sub.l d2,d3    ; x*x-a
  6424.  asr.l #1,d3    ; (x*x-a)/2
  6425.  divs d0,d3    ; (x*x-a)/2x
  6426.  sub.w d3,d0    ; second approx
  6427.  bgt .stillnot0
  6428.  move.w #1,d0
  6429. .stillnot0
  6430.  
  6431.  move.w d0,d3
  6432.  muls d3,d3
  6433.  sub.l d2,d3
  6434.  asr.l #1,d3
  6435.  divs d0,d3
  6436.  sub.w d3,d0    ; second approx
  6437.  bgt .stillnot02
  6438.  move.w #1,d0
  6439. .stillnot02
  6440.  
  6441.  move.w #64,d3
  6442.  muls Noisevol,d3
  6443.  asr.w #1,d0
  6444.  addq #1,d0
  6445.  divs d0,d3
  6446.  
  6447.  cmp.w #64,d3
  6448.  ble.s notooloud
  6449.  move.w #64,d3
  6450. notooloud:
  6451.  
  6452. pastcalc:
  6453.  
  6454.     ; d3 contains volume of noise.
  6455.     
  6456.  move.w d3,d4
  6457.  
  6458.  move.w d3,d2
  6459.  muls Noisex,d2
  6460.  add.w d0,d0
  6461.  divs d0,d2
  6462.  
  6463.  bgt.s quietleft
  6464.  add.w d2,d4
  6465.  bge.s donequiet
  6466.  move.w #0,d4
  6467.  bra.s donequiet
  6468. quietleft:
  6469.  sub.w d2,d3
  6470.  bge.s donequiet
  6471.  move.w #0,d3
  6472. donequiet:
  6473.  
  6474. ; d3=leftvol?
  6475. ; d4=rightvol?
  6476.  
  6477.  clr.w needleft
  6478.  
  6479.  cmp.b d3,d4
  6480.  bgt.s RightLouder
  6481.  
  6482. ; Left is louder; is it MUCH louder?
  6483.  
  6484.  st needleft
  6485.  move.w d3,d2
  6486.  sub.w d4,d2
  6487.  cmp.w #32,d2
  6488.  slt needright
  6489.  bra aboutsame
  6490.  
  6491. RightLouder:
  6492.  st needright
  6493.  move.w d4,d2
  6494.  sub.w d3,d2
  6495.  cmp.w #32,d2
  6496.  slt needleft
  6497.  
  6498. aboutsame:
  6499.  
  6500.  tst.b STEREO
  6501.  beq NOSTEREO
  6502.  
  6503. ; Find least important sound on left
  6504.  
  6505.  move.l #0,a2
  6506.  move.l #0,d5
  6507.  move.w #10000,d2
  6508.  move.b IDNUM,d0
  6509.  lea LEFTCHANDATA,a3
  6510.  move.w #3,d1
  6511. FindLeftChannel
  6512.  tst.b (a3)
  6513.  bne.s .notactive
  6514.  cmp.b 1(a3),d0
  6515.  beq.s FOUNDLEFT
  6516.  cmp.w 2(a3),d2
  6517.  blt.s .notactive
  6518.  move.w 2(a3),d2
  6519.  move.l a3,a2
  6520.  move.w d5,d6
  6521.  
  6522. .notactive:
  6523.  add.w #4,a3
  6524.  add.w #1,d5
  6525.  dbra d1,FindLeftChannel
  6526.  move.l a2,a3
  6527.  bra.s gopastleft
  6528. FOUNDLEFT:
  6529.  move.w d5,d6
  6530. gopastleft:
  6531.  tst.l a3
  6532.  bne.s FOUNDALEFT
  6533.  rts
  6534. FOUNDALEFT:
  6535.  
  6536. ; d6 = channel number
  6537.  move.b d0,1(a3)
  6538.  move.w d3,2(a3)
  6539.  
  6540.  move.w Samplenum,d5
  6541.  move.l #SampleList,a3
  6542.  move.l (a3,d5.w*8),a1
  6543.  move.l 4(a3,d5.w*8),a2
  6544.  
  6545.  tst.b d6
  6546.  seq NoiseMade0LEFT
  6547.  beq.s .chan0
  6548.  cmp.b #2,d6
  6549.  slt NoiseMade1LEFT
  6550.  blt .chan1
  6551.  seq NoiseMade2LEFT
  6552.  beq .chan2
  6553.  st NoiseMade3LEFT
  6554.  
  6555.  move.b d5,LEFTPLAYEDTAB+9
  6556.  move.b d3,LEFTPLAYEDTAB+1+9
  6557.  move.b d4,LEFTPLAYEDTAB+2+9
  6558.  move.b d3,vol3left
  6559.  move.l a1,pos3LEFT
  6560.  move.l a2,Samp3endLEFT
  6561.  bra dorightchan
  6562.  
  6563. .chan0: 
  6564.  move.b d5,LEFTPLAYEDTAB
  6565.  move.b d3,LEFTPLAYEDTAB+1
  6566.  move.b d4,LEFTPLAYEDTAB+2
  6567.  move.l a1,pos0LEFT
  6568.  move.l a2,Samp0endLEFT
  6569.  move.b d3,vol0left
  6570.  bra dorightchan
  6571.  
  6572. .chan1:
  6573.  move.b d5,LEFTPLAYEDTAB+3
  6574.  move.b d3,LEFTPLAYEDTAB+1+3
  6575.  move.b d4,LEFTPLAYEDTAB+2+3
  6576.  move.b d3,vol1left
  6577.  move.l a1,pos1LEFT
  6578.  move.l a2,Samp1endLEFT
  6579.  bra dorightchan
  6580.  
  6581. .chan2: 
  6582.  move.b d5,LEFTPLAYEDTAB+6
  6583.  move.b d3,LEFTPLAYEDTAB+1+6
  6584.  move.b d4,LEFTPLAYEDTAB+2+6
  6585.  move.l a1,pos2LEFT
  6586.  move.l a2,Samp2endLEFT
  6587.  move.b d3,vol2left
  6588.  
  6589. dorightchan:
  6590.  
  6591. ; Find least important sound on right
  6592.  
  6593.  move.l #0,a2
  6594.  move.l #0,d5
  6595.  move.w #10000,d2
  6596.  move.b IDNUM,d0
  6597.  lea RIGHTCHANDATA,a3
  6598.  move.w #3,d1
  6599. FindRightChannel
  6600.  tst.b (a3)
  6601.  bne.s .notactive
  6602.  cmp.b 1(a3),d0
  6603.  beq.s FOUNDRIGHT
  6604.  cmp.w 2(a3),d2
  6605.  blt.s .notactive
  6606.  move.w 2(a3),d2
  6607.  move.l a3,a2
  6608.  move.w d5,d6
  6609.  
  6610. .notactive:
  6611.  add.w #4,a3
  6612.  add.w #1,d5
  6613.  dbra d1,FindRightChannel
  6614.  move.l a2,a3
  6615.  bra.s gopastright
  6616. FOUNDRIGHT:
  6617.  move.w d5,d6
  6618. gopastright:
  6619.  tst.l a3
  6620.  bne.s FOUNDARIGHT
  6621.  rts
  6622. FOUNDARIGHT:
  6623.  
  6624. ; d6 = channel number
  6625.  move.b d0,1(a3)
  6626.  move.w d3,2(a3)
  6627.  
  6628.  move.w Samplenum,d5
  6629.  move.l #SampleList,a3
  6630.  move.l (a3,d5.w*8),a1
  6631.  move.l 4(a3,d5.w*8),a2
  6632.  
  6633.  tst.b d6
  6634.  seq NoiseMade0RIGHT
  6635.  beq.s .chan0
  6636.  cmp.b #2,d6
  6637.  slt NoiseMade1RIGHT
  6638.  blt .chan1
  6639.  seq NoiseMade2RIGHT
  6640.  beq .chan2
  6641.  st NoiseMade3RIGHT
  6642.  
  6643.  move.b d5,RIGHTPLAYEDTAB+9
  6644.  move.b d3,RIGHTPLAYEDTAB+1+9
  6645.  move.b d4,RIGHTPLAYEDTAB+2+9
  6646.  move.b d4,vol3right
  6647.  move.l a1,pos3RIGHT
  6648.  move.l a2,Samp3endRIGHT
  6649.  rts
  6650.  
  6651. .chan0: 
  6652.  move.b d5,RIGHTPLAYEDTAB
  6653.  move.b d3,RIGHTPLAYEDTAB+1
  6654.  move.b d4,RIGHTPLAYEDTAB+2
  6655.  move.l a1,pos0RIGHT
  6656.  move.l a2,Samp0endRIGHT
  6657.  move.b d4,vol0right
  6658.  rts
  6659.  
  6660. .chan1:
  6661.  move.b d5,RIGHTPLAYEDTAB+3
  6662.  move.b d3,RIGHTPLAYEDTAB+1+3
  6663.  move.b d4,RIGHTPLAYEDTAB+2+3
  6664.  move.b d3,vol1right
  6665.  move.l a1,pos1RIGHT
  6666.  move.l a2,Samp1endRIGHT
  6667.  rts
  6668.  
  6669. .chan2: 
  6670.  move.b d5,RIGHTPLAYEDTAB+6
  6671.  move.b d3,RIGHTPLAYEDTAB+1+6
  6672.  move.b d4,RIGHTPLAYEDTAB+2+6
  6673.  move.l a1,pos2RIGHT
  6674.  move.l a2,Samp2endRIGHT
  6675.  move.b d3,vol2right
  6676.  rts
  6677.  
  6678. NOSTEREO:
  6679.  move.l #0,a2
  6680.  move.l #0,d5
  6681.  move.w #10000,d2
  6682.  move.b IDNUM,d0
  6683.  lea CHANNELDATA,a3
  6684.  move.w #7,d1
  6685. FindChannel
  6686.  tst.b (a3)
  6687.  bne.s .notactive
  6688.  cmp.b 1(a3),d0
  6689.  beq.s FOUNDCHAN
  6690.  cmp.w 2(a3),d2
  6691.  blt.s .notactive
  6692.  move.w 2(a3),d2
  6693.  move.l a3,a2
  6694.  move.w d5,d6
  6695.  
  6696. .notactive:
  6697.  add.w #4,a3
  6698.  add.w #1,d5
  6699.  dbra d1,FindChannel
  6700.  move.l a2,a3
  6701.  bra.s gopastchan
  6702. FOUNDCHAN:
  6703.  move.w d5,d6
  6704. gopastchan:
  6705.  tst.l a3
  6706.  bne.s FOUNDACHAN
  6707. tooquiet:
  6708.  rts
  6709. FOUNDACHAN:
  6710.  
  6711. ; d6 = channel number
  6712.  
  6713.  cmp.w d2,d3
  6714.  blt.s tooquiet
  6715.  
  6716.  move.b d0,1(a3)
  6717.  move.w d3,2(a3)
  6718.  
  6719.  move.w Samplenum,d5
  6720.  move.l #SampleList,a3
  6721.  move.l (a3,d5.w*8),a1
  6722.  move.l 4(a3,d5.w*8),a2
  6723.  
  6724.  tst.b d6
  6725.  seq NoiseMade0LEFT
  6726.  beq .chan0
  6727.  cmp.b #2,d6
  6728.  slt NoiseMade1LEFT
  6729.  blt .chan1
  6730.  seq NoiseMade2LEFT
  6731.  beq .chan2
  6732.  cmp.b #4,d6
  6733.  slt NoiseMade3LEFT
  6734.  blt .chan3
  6735.  seq NoiseMade0RIGHT
  6736.  beq .chan4
  6737.  cmp.b #6,d6
  6738.  slt NoiseMade1RIGHT
  6739.  blt .chan5
  6740.  seq NoiseMade2RIGHT
  6741.  beq .chan6
  6742.  st NoiseMade3RIGHT
  6743.  
  6744.  move.b d5,RIGHTPLAYEDTAB+9
  6745.  move.b d3,RIGHTPLAYEDTAB+1+9
  6746.  move.b d4,RIGHTPLAYEDTAB+2+9
  6747.  move.b d4,vol3right
  6748.  move.l a1,pos3RIGHT
  6749.  move.l a2,Samp3endRIGHT
  6750.  rts
  6751.  
  6752. .chan3:
  6753.  move.b d5,LEFTPLAYEDTAB+9
  6754.  move.b d3,LEFTPLAYEDTAB+1+9
  6755.  move.b d4,LEFTPLAYEDTAB+2+9
  6756.  move.b d3,vol3left
  6757.  move.l a1,pos3LEFT
  6758.  move.l a2,Samp3endLEFT
  6759.  bra dorightchan
  6760.  
  6761. .chan0: 
  6762.  move.b d5,LEFTPLAYEDTAB
  6763.  move.b d3,LEFTPLAYEDTAB+1
  6764.  move.b d4,LEFTPLAYEDTAB+2
  6765.  move.l a1,pos0LEFT
  6766.  move.l a2,Samp0endLEFT
  6767.  move.b d3,vol0left
  6768.  rts
  6769.  
  6770. .chan1:
  6771.  move.b d5,LEFTPLAYEDTAB+3
  6772.  move.b d3,LEFTPLAYEDTAB+1+3
  6773.  move.b d4,LEFTPLAYEDTAB+2+3
  6774.  move.b d3,vol1left
  6775.  move.l a1,pos1LEFT
  6776.  move.l a2,Samp1endLEFT
  6777.  rts
  6778.  
  6779. .chan2: 
  6780.  move.b d5,LEFTPLAYEDTAB+6
  6781.  move.b d3,LEFTPLAYEDTAB+1+6
  6782.  move.b d4,LEFTPLAYEDTAB+2+6
  6783.  move.l a1,pos2LEFT
  6784.  move.l a2,Samp2endLEFT
  6785.  move.b d3,vol2left
  6786.  rts
  6787.  
  6788. .chan4: 
  6789.  move.b d5,RIGHTPLAYEDTAB
  6790.  move.b d3,RIGHTPLAYEDTAB+1
  6791.  move.b d4,RIGHTPLAYEDTAB+2
  6792.  move.l a1,pos0RIGHT
  6793.  move.l a2,Samp0endRIGHT
  6794.  move.b d4,vol0right
  6795.  rts
  6796.  
  6797. .chan5:
  6798.  move.b d5,RIGHTPLAYEDTAB+3
  6799.  move.b d3,RIGHTPLAYEDTAB+1+3
  6800.  move.b d4,RIGHTPLAYEDTAB+2+3
  6801.  move.b d3,vol1right
  6802.  move.l a1,pos1RIGHT
  6803.  move.l a2,Samp1endRIGHT
  6804.  rts
  6805.  
  6806. .chan6: 
  6807.  move.b d5,RIGHTPLAYEDTAB+6
  6808.  move.b d3,RIGHTPLAYEDTAB+1+6
  6809.  move.b d4,RIGHTPLAYEDTAB+2+6
  6810.  move.l a1,pos2RIGHT
  6811.  move.l a2,Samp2endRIGHT
  6812.  move.b d3,vol2right
  6813.  rts
  6814.  
  6815. SampleList:
  6816.  dc.l Scream,EndScream
  6817.  dc.l Shoot,EndShoot
  6818.  dc.l Munch,EndMunch
  6819.  dc.l PooGun,EndPooGun
  6820.  dc.l Collect,EndCollect
  6821. ;5
  6822.  dc.l DoorNoise,EndDoorNoise
  6823.  dc.l 0,0
  6824.  dc.l Stomp,EndStomp
  6825.  dc.l LowScream,EndLowScream
  6826.  dc.l BaddieGun,EndBaddieGun
  6827. ;10
  6828.  dc.l SwitchNoise,EndSwitch
  6829.  dc.l Reload,EndReload
  6830.  dc.l NoAmmo,EndNoAmmo
  6831.  dc.l Splotch,EndSplotch
  6832.  dc.l SplatPop,EndSplatPop
  6833. ;15
  6834.  dc.l Boom,EndBoom
  6835.  dc.l Hiss,EndHiss
  6836.  dc.l Howl1,EndHowl1
  6837.  dc.l Howl2,EndHowl2
  6838.  dc.l Pant,EndPant
  6839. ;20
  6840.  dc.l Whoosh,EndWhoosh
  6841.  dc.l ROAR,EndROAR
  6842.  
  6843.  include "ab3:source/wallchunk.s"
  6844.  
  6845. saveinters:  
  6846.  dc.w 0
  6847.  
  6848. z: dc.w 10
  6849.  
  6850. notifplaying:
  6851.  dc.w 0
  6852.  
  6853. audpos1: dc.w 0
  6854. audpos1b: dc.w 0
  6855. audpos2: dc.w 0
  6856. audpos2b: dc.w 0
  6857. audpos3: dc.w 0
  6858. audpos3b: dc.w 0
  6859. audpos4: dc.w 0
  6860. audpos4b: dc.w 0
  6861.  
  6862. vol0left: dc.w 0
  6863. vol0right: dc.w 0
  6864. vol1left: dc.w 0
  6865. vol1right: dc.w 0
  6866. vol2left: dc.w 0
  6867. vol2right: dc.w 0
  6868. vol3left: dc.w 0
  6869. vol3right: dc.w 0
  6870.  
  6871. pos: dc.l 0
  6872.  
  6873. pos0LEFT: dc.l empty
  6874. pos1LEFT: dc.l empty
  6875. pos2LEFT: dc.l empty
  6876. pos3LEFT: dc.l empty
  6877. pos0RIGHT: dc.l empty
  6878. pos1RIGHT: dc.l empty
  6879. pos2RIGHT: dc.l empty
  6880. pos3RIGHT: dc.l empty
  6881.  
  6882. numtodo dc.w 0
  6883.  
  6884. npt: dc.w 0
  6885.  
  6886. pretab:
  6887. val SET 0
  6888.  REPT 128
  6889.  dc.b val
  6890. val SET val+1
  6891.  ENDR
  6892. val SET -128
  6893.  REPT 128
  6894.  dc.b val
  6895. val SET val+1
  6896.  ENDR 
  6897.  
  6898. tab:
  6899.  ds.b 256*65
  6900.  
  6901.  
  6902. test: dc.l 0
  6903.  ds.l 30
  6904.  
  6905.  even
  6906. ConstCols:
  6907.  incbin "ConstCols"
  6908.  even
  6909. Smoothscalecols:
  6910. ; incbin "smoothbumppalscaled"
  6911.  even
  6912. SmoothTile:
  6913. ; incbin "smoothbumptile"
  6914.  even
  6915. Bumpscalecols:
  6916. ; incbin "Bumppalscaled"
  6917.  even
  6918. Bumptile:
  6919. ; incbin "bumptile"
  6920.  even
  6921. scalecols: ;incbin "bytepixpalscaled"
  6922.  even
  6923. floorscalecols: incbin "floorpalscaled"
  6924.  ds.w 256*4
  6925.  
  6926.  even
  6927. PaletteAddr: dc.l 0
  6928. ChunkAddr: dc.l 0
  6929. ;walltiles:
  6930. ; dc.l GreenMechanicWALL
  6931. ; dc.l BlueGreyMetalWALL
  6932. ; dc.l TechnoDetailWALL
  6933. ; dc.l BlueStoneWALL
  6934. ; dc.l RedAlertWALL
  6935. ; dc.l RockWALL
  6936. ;
  6937. ;GreenMechanicWALL: incbin "ab3:includes/walls/greenmechanic.wad"
  6938. ;BlueGreyMetalWALL: incbin "ab3:includes/walls/BlueGreyMetal.wad"
  6939. ;TechnoDetailWALL: incbin "ab3:includes/walls/TechnoDetail.wad"
  6940. ;BlueStoneWALL: incbin "ab3:includes/walls/bluestone.wad"
  6941. ;RedAlertWALL: incbin "ab3:includes/walls/redalert.wad"
  6942. ;RockWALL: incbin "ab3:includes/walls/rock.wad"
  6943.  
  6944. floortile:
  6945.  incbin "floortile" 
  6946.  even
  6947. wallrouts:
  6948. ; incbin "2x2WallDraw" 
  6949.  CNOP 0,64
  6950. BackPicture:
  6951.  incbin "backfile"
  6952. EndBackPicture:
  6953.  
  6954. drawpt: dc.l colbars2
  6955. olddrawpt: dc.l colbars
  6956. frompt: dc.l 0 
  6957.  
  6958. SineTable:
  6959.  incbin "bigsine"
  6960.  
  6961. angpos: dc.w 0
  6962. angspd: dc.w 0
  6963. flooryoff: dc.w 0
  6964. xoff: dc.l 0
  6965. yoff: dc.l 0
  6966. yvel: dc.l 0
  6967. zoff: dc.l 0
  6968. tyoff: dc.l 0
  6969. xspdval: dc.l 0
  6970. zspdval: dc.l 0
  6971. Zone: dc.w 0
  6972.  
  6973. PLR1: dc.b $ff
  6974.  even
  6975. PLR1_energy: dc.w 191
  6976. PLR1_GunSelected: dc.w 0
  6977. PLR1_cosval: dc.w 0
  6978. PLR1_sinval: dc.w 0
  6979. PLR1_angpos: dc.w 0
  6980. PLR1_angspd: dc.w 0
  6981. PLR1_xoff: dc.l 0
  6982. PLR1_yoff: dc.l 0
  6983. PLR1_yvel: dc.l 0
  6984. PLR1_zoff: dc.l 0
  6985. PLR1_tyoff: dc.l 0
  6986. PLR1_xspdval: dc.l 0
  6987. PLR1_zspdval: dc.l 0
  6988. PLR1_Zone: dc.w 0
  6989. PLR1_Roompt: dc.l 0
  6990. PLR1_OldRoompt: dc.l 0
  6991. PLR1_PointsToRotatePtr: dc.l 0
  6992. PLR1_ListOfGraphRooms: dc.l 0
  6993. PLR1_oldxoff: dc.l 0
  6994. PLR1_oldzoff: dc.l 0
  6995. PLR1_StoodInTop: dc.b 0
  6996.  even
  6997. PLR1_height: dc.l 0
  6998.  
  6999.  ds.w 4
  7000.  
  7001. PLR1s_cosval: dc.w 0
  7002. PLR1s_sinval: dc.w 0
  7003. PLR1s_angpos: dc.w 0
  7004. PLR1s_angspd: dc.w 0
  7005. PLR1s_xoff: dc.l 0
  7006. PLR1s_yoff: dc.l 0
  7007. PLR1s_yvel: dc.l 0
  7008. PLR1s_zoff: dc.l 0
  7009. PLR1s_tyoff: dc.l 0
  7010. PLR1s_xspdval: dc.l 0
  7011. PLR1s_zspdval: dc.l 0
  7012. PLR1s_Zone: dc.w 0
  7013. PLR1s_Roompt: dc.l 0
  7014. PLR1s_OldRoompt: dc.l 0
  7015. PLR1s_PointsToRotatePtr: dc.l 0
  7016. PLR1s_ListOfGraphRooms: dc.l 0
  7017. PLR1s_oldxoff: dc.l 0
  7018. PLR1s_oldzoff: dc.l 0
  7019. PLR1s_height: dc.l 0
  7020. PLR1s_targheight: dc.l 0
  7021.  
  7022. p1_xoff: dc.l 0
  7023. p1_zoff: dc.l 0
  7024. p1_yoff: dc.l 0
  7025. p1_height: dc.l 0
  7026. p1_angpos: dc.w 0
  7027. p1_bobble: dc.w 0
  7028. p1_clicked: dc.b 0
  7029. p1_spctap: dc.b 0
  7030. p1_ducked: dc.b 0
  7031. p1_gunselected: dc.b 0
  7032. p1_fire: dc.b 0
  7033.  
  7034.  ds.w 4
  7035.  
  7036. PLR2: dc.b $ff
  7037.  even
  7038. PLR2_GunSelected: dc.w 0
  7039. PLR2_energy: dc.w 191
  7040. PLR2_cosval: dc.w 0
  7041. PLR2_sinval: dc.w 0
  7042. PLR2_angpos: dc.w 0
  7043. PLR2_angspd: dc.w 0
  7044. PLR2_xoff: dc.l 0
  7045. PLR2_yoff: dc.l 0
  7046. PLR2_yvel: dc.l 0
  7047. PLR2_zoff: dc.l 0
  7048. PLR2_tyoff: dc.l 0
  7049. PLR2_xspdval: dc.l 0
  7050. PLR2_zspdval: dc.l 0
  7051. PLR2_Zone: dc.w 0
  7052. PLR2_Roompt: dc.l 0
  7053. PLR2_OldRoompt: dc.l 0
  7054. PLR2_PointsToRotatePtr: dc.l 0
  7055. PLR2_ListOfGraphRooms: dc.l 0
  7056. PLR2_oldxoff: dc.l 0
  7057. PLR2_oldzoff: dc.l 0
  7058. PLR2_StoodInTop: dc.b 0
  7059.  even
  7060. PLR2_height: dc.l 0
  7061.  
  7062.  ds.w 4
  7063.  
  7064. PLR2s_cosval: dc.w 0
  7065. PLR2s_sinval: dc.w 0
  7066. PLR2s_angpos: dc.w 0
  7067. PLR2s_angspd: dc.w 0
  7068. PLR2s_xoff: dc.l 0
  7069. PLR2s_yoff: dc.l 0
  7070. PLR2s_yvel: dc.l 0
  7071. PLR2s_zoff: dc.l 0
  7072. PLR2s_tyoff: dc.l 0
  7073. PLR2s_xspdval: dc.l 0
  7074. PLR2s_zspdval: dc.l 0
  7075. PLR2s_Zone: dc.w 0
  7076. PLR2s_Roompt: dc.l 0
  7077. PLR2s_OldRoompt: dc.l 0
  7078. PLR2s_PointsToRotatePtr: dc.l 0
  7079. PLR2s_ListOfGraphRooms: dc.l 0
  7080. PLR2s_oldxoff: dc.l 0
  7081. PLR2s_oldzoff: dc.l 0
  7082. PLR2s_height: dc.l 0
  7083. PLR2s_targheight: dc.l 0
  7084.  
  7085.  ds.w 4
  7086.  
  7087. p2_xoff: dc.l 0
  7088. p2_zoff: dc.l 0
  7089. p2_yoff: dc.l 0
  7090. p2_height: dc.l 0
  7091. p2_angpos: dc.w 0
  7092. p2_bobble: dc.w 0
  7093. p2_clicked: dc.b 0
  7094. p2_spctap: dc.b 0
  7095. p2_ducked: dc.b 0
  7096. p2_gunselected: dc.b 0
  7097. p2_fire: dc.b 0
  7098.  
  7099.  
  7100. liftanimtab:
  7101.  
  7102.  
  7103. endliftanimtab:
  7104.  
  7105. glassball:
  7106.  incbin "glassball.inc"
  7107. endglass
  7108. glassballpt: dc.l glassball
  7109.  
  7110. rndtab: ; incbin "randfile"
  7111. endrnd: 
  7112.  
  7113. brightanimtab:
  7114.  dcb.w 200,20
  7115.  dc.w 5
  7116.  dc.w 10,20
  7117.  dc.w 5
  7118.  dcb.w 30,20
  7119.  dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  7120.  dcb.w 40,0
  7121.  dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  7122.  dcb.w 300,0
  7123.  dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  7124.  dc.w -1
  7125.  
  7126. Roompt: dc.l 0
  7127. OldRoompt: dc.l 0
  7128.  
  7129. *****************************************************************
  7130.  *
  7131.  include "AB3:source/LevelData2"
  7132.  *
  7133. *****************************************************************
  7134.  
  7135.  
  7136. wallpt: dc.l 0
  7137. floorpt: dc.l 0
  7138.  
  7139. Rotated:
  7140.  ds.l 800 
  7141. ObjRotated:
  7142.  ds.l 800
  7143.  
  7144. OnScreen:
  7145.  ds.l 800 
  7146.  
  7147. startwait: dc.w 0
  7148. endwait: dc.w 0
  7149.  
  7150. Faces: incbin "faces2raw"
  7151.  
  7152. *******************************************************************
  7153.  
  7154. consttab:
  7155.  incbin "constantfile"
  7156.  
  7157. *******************************************************************
  7158.  
  7159. darkentab: incbin "darkenedcols"
  7160. brightentab: incbin "brightenfile"
  7161. WorkSpace:
  7162.  ds.l 8192 
  7163. waterfile: incbin "waterfile"
  7164.  
  7165.  SECTION ffff,CODE_C
  7166.  
  7167. nullspr: dc.l 0
  7168.  
  7169.  cnop 0,8
  7170. borders:
  7171.  incbin "leftbord"
  7172.  incbin "rightbord"
  7173.  
  7174. health: incbin "healthstrip"
  7175. Ammunition: incbin "ammostrip"
  7176. healthpal: incbin "healthpal"
  7177. PanelKeys: incbin "greenkey"
  7178.  incbin "redkey"
  7179.  incbin "yellowkey"
  7180.  incbin "bluekey"
  7181.  
  7182. null: ds.w 500
  7183. null2: ds.w 500
  7184. null3: ds.w 500
  7185. null4: ds.w 500
  7186.  
  7187.  
  7188. Blurbfield:
  7189.  
  7190.  dc.w bpl1ptl
  7191. bl1l: dc.w 0
  7192.  dc.w bpl1pth
  7193. bl1h: dc.w 0
  7194.  
  7195.  dc.w diwstart,$2c81
  7196.  dc.w diwstop,$1cc1
  7197.  dc.w ddfstart,$38
  7198.  dc.w ddfstop,$b8
  7199.  dc.w bplcon0,$9201
  7200.  dc.w bplcon1,0
  7201.  dc.w $106,$c40
  7202. blcols:
  7203.  dc.w col0,0
  7204.  dc.w col1,$fff
  7205.  
  7206.  dc.w $108,0
  7207.  dc.w $10a,0
  7208.  
  7209.  dc.w $ffff,$fffe
  7210.  dc.w $ffff,$fffe
  7211.  
  7212. nullline:
  7213.  ds.b 80    
  7214.  
  7215. bigfield:    
  7216.                 ; Start of our copper list.
  7217.  
  7218.  dc.w dmacon,$8020
  7219.  dc.w intreq,$8011
  7220.  dc.w $1fc,$f
  7221.  dc.w diwstart
  7222. winstart: dc.w $2cb1
  7223.  dc.w diwstop
  7224. winstop: dc.w $2c91
  7225.  dc.w ddfstart
  7226. fetchstart: dc.w $48
  7227.  dc.w ddfstop
  7228. fetchstop: dc.w $88
  7229.  
  7230. bordercols:
  7231.  incbin "borderpal"
  7232.  
  7233.  dc.w spr0ptl
  7234. s0l:
  7235.  dc.w 0
  7236.  dc.w spr0pth
  7237. s0h:
  7238.  dc.w 0
  7239.  dc.w spr1ptl
  7240. s1l:
  7241.  dc.w 0
  7242.  dc.w spr1pth
  7243. s1h:
  7244.  dc.w 0
  7245.  dc.w spr2ptl
  7246. s2l:
  7247.  dc.w 0
  7248.  dc.w spr2pth
  7249. s2h:
  7250.  dc.w 0
  7251.  dc.w spr3ptl
  7252. s3l:
  7253.  dc.w 0
  7254.  dc.w spr3pth
  7255. s3h:
  7256.  dc.w 0
  7257.  dc.w spr4ptl
  7258. s4l:
  7259.  dc.w 0
  7260.  dc.w spr4pth
  7261. s4h:
  7262.  dc.w 0
  7263.  dc.w spr5ptl
  7264. s5l:
  7265.  dc.w 0
  7266.  dc.w spr5pth
  7267. s5h:
  7268.  dc.w 0
  7269.  dc.w spr6ptl
  7270. s6l:
  7271.  dc.w 0
  7272.  dc.w spr6pth
  7273. s6h:
  7274.  dc.w 0
  7275.  dc.w spr7ptl
  7276. s7l:
  7277.  dc.w 0
  7278.  dc.w spr7pth
  7279. s7h:
  7280.  dc.w 0
  7281.  
  7282.  
  7283.  dc.w $106,$c42
  7284.  incbin "borderpal"
  7285.  
  7286.  dc.w $106,$8c42
  7287.  dc.w col0
  7288. hitcol: dc.w $0
  7289.  dc.w $106,$c42
  7290.  dc.w col0
  7291. hitcol2: dc.w 0
  7292.  
  7293.  dc.w bplcon0,$7201
  7294.  dc.w bplcon1
  7295. smoff:
  7296.  dc.w $0
  7297.  
  7298.  dc.w $108
  7299. modulo: dc.w -24
  7300.  dc.w $10a,-24
  7301.  
  7302.  dc.w bpl1pth
  7303. pl1h
  7304.  dc.w 0
  7305.  
  7306.  dc.w bpl1ptl
  7307. pl1l
  7308.  dc.w 0
  7309.  
  7310.  dc.w bpl2pth
  7311. pl2h
  7312.  dc.w 0
  7313.  
  7314.  dc.w bpl2ptl
  7315. pl2l
  7316.  dc.w 0
  7317.  
  7318.  dc.w bpl3pth
  7319. pl3h
  7320.  dc.w 0
  7321.  
  7322.  dc.w bpl3ptl
  7323. pl3l
  7324.  dc.w 0
  7325.  
  7326.  dc.w bpl4pth
  7327. pl4h
  7328.  dc.w 0
  7329.  
  7330.  dc.w bpl4ptl
  7331. pl4l
  7332.  dc.w 0
  7333.  
  7334.  dc.w bpl5pth
  7335. pl5h
  7336.  dc.w 0
  7337.  
  7338.  dc.w bpl5ptl
  7339. pl5l
  7340.  dc.w 0
  7341.  
  7342.  dc.w bpl6pth
  7343. pl6h
  7344.  dc.w 0
  7345.  
  7346.  dc.w bpl6ptl
  7347. pl6l
  7348.  dc.w 0
  7349.  
  7350.  dc.w bpl7pth
  7351. pl7h
  7352.  dc.w 0
  7353.  
  7354.  dc.w bpl7ptl
  7355. pl7l
  7356.  dc.w 0
  7357.  
  7358.  
  7359.  dc.w $1001,$ff00
  7360.  dc.w intreq,$11
  7361. yposcop:
  7362.  dc.w $2a11,$fffe
  7363.  dc.w $8a,0
  7364.  
  7365.  ds.l 104*12
  7366.  
  7367. colbars:
  7368. val SET $2a
  7369.  dcb.l 104*80,$1fe0000
  7370.  dc.w $106,$c42
  7371.  
  7372.  dc.w $80
  7373. pch1:
  7374.  dc.w 0
  7375.  dc.w $82
  7376. pcl1:
  7377.  dc.w 0 
  7378.  dc.w $88,0
  7379.  
  7380.  dc.w $ffff,$fffe       ; End copper list.
  7381.  
  7382.  ds.l 104*12
  7383.  
  7384. colbars2:
  7385. val SET $2a
  7386.  dcb.l 104*80,$1fe0000
  7387.  
  7388.  dc.w $106,$c42
  7389.  
  7390.  dc.w $80
  7391. pch2:
  7392.  dc.w 0
  7393.  dc.w $82
  7394. pcl2:
  7395.  dc.w 0
  7396.  
  7397.  dc.w $88,0
  7398.  
  7399.  dc.w $ffff,$fffe       ; End copper list.
  7400.  
  7401.  ds.l 104*10
  7402.  
  7403. old: dc.l 0
  7404.  
  7405. prot5: dc.w 0
  7406. PanelCop:
  7407.  
  7408.  dc.w $10c,0
  7409.  dc.w bplcon0,$1201
  7410.  dc.w bpl1ptl
  7411. n1l:
  7412.  dc.w 0
  7413.  dc.w bpl1pth
  7414. n1h:
  7415.  dc.w 0
  7416.  dc.w $108,-24
  7417.  incbin "Panelpal"
  7418.  
  7419.  dc.w bpl2pth
  7420. p2h
  7421.  dc.w 0
  7422.  
  7423.  dc.w bpl2ptl
  7424. p2l
  7425.  dc.w 0
  7426.  
  7427.  dc.w bpl3pth
  7428. p3h
  7429.  dc.w 0
  7430.  
  7431.  dc.w bpl3ptl
  7432. p3l
  7433.  dc.w 0
  7434.  
  7435.  dc.w bpl4pth
  7436. p4h
  7437.  dc.w 0
  7438.  dc.w bpl4ptl
  7439. p4l
  7440.  dc.w 0
  7441.  dc.w bpl5pth
  7442. p5h
  7443.  dc.w 0
  7444.  dc.w bpl5ptl
  7445. p5l
  7446.  dc.w 0
  7447.  dc.w bpl6pth
  7448. p6h
  7449.  dc.w 0
  7450.  dc.w bpl6ptl
  7451. p6l
  7452.  dc.w 0
  7453.  dc.w bpl7pth
  7454. p7h
  7455.  dc.w 0
  7456.  dc.w bpl7ptl
  7457. p7l
  7458.  dc.w 0
  7459.  dc.w bpl8pth
  7460. p8h
  7461.  dc.w 0
  7462.  dc.w bpl8ptl
  7463. p8l
  7464.  dc.w 0
  7465.  
  7466.  dc.w $80
  7467. och:
  7468.  dc.w 0
  7469.  dc.w $82
  7470. ocl:
  7471.  dc.w 0
  7472.  
  7473.  dc.w ddfstart,$38
  7474.  dc.w ddfstop,$b8
  7475.  dc.w diwstart,$2c81
  7476.  dc.w diwstop,$2cc1
  7477.  
  7478.  dc.w bplcon0
  7479. Panelcon: dc.w $0211
  7480.  dc.w bpl1pth
  7481. p1h
  7482.  dc.w 0
  7483.  
  7484.  dc.w bpl1ptl
  7485. p1l
  7486.  dc.w 0
  7487.  
  7488.  
  7489.  dc.w $108,40*7
  7490.  dc.w $10a,40*7
  7491.  
  7492.  dc.w $ffff,$fffe
  7493.  
  7494.  dc.w $180,$fff
  7495.  
  7496.  
  7497.  dc.w $f801,$ff00
  7498.  dc.w col1,$50
  7499.  dc.w $f901,$ff00
  7500.  dc.w col1,$90
  7501.  dc.w $fa01,$ff00
  7502.  dc.w col1,$f0
  7503.  dc.w $fb01,$ff00
  7504.  dc.w col1,$f0
  7505.  dc.w $fc01,$ff00
  7506.  dc.w col1,$90
  7507.  dc.w $fd01,$ff00
  7508.  dc.w col1,$50
  7509.  
  7510.  dc.w $fe01,$ff00
  7511.  dc.w col1,$fff
  7512.  
  7513.  dc.w $ffdf,$fffe
  7514.  dc.w $a01,$ff00
  7515.  dc.w bplcon0,$201
  7516.  
  7517.  incbin "faces2cols"
  7518.  dc.w bpl1pth
  7519. f1h
  7520.  dc.w 0
  7521.  
  7522.  dc.w bpl1ptl
  7523. f1l
  7524.  dc.w 0
  7525.  
  7526.  dc.w bpl2pth
  7527. f2h
  7528.  dc.w 0
  7529.  
  7530.  dc.w bpl2ptl
  7531. f2l
  7532.  dc.w 0
  7533.  
  7534.  dc.w bpl3pth
  7535. f3h
  7536.  dc.w 0
  7537.  
  7538.  dc.w bpl3ptl
  7539. f3l
  7540.  dc.w 0
  7541.  
  7542.  dc.w bpl4pth
  7543. f4h
  7544.  dc.w 0
  7545.  dc.w bpl4ptl
  7546. f4l
  7547.  dc.w 0
  7548.  
  7549.  dc.w bpl5pth
  7550. f5h
  7551.  dc.w 0
  7552.  dc.w bpl5ptl
  7553. f5l
  7554.  dc.w 0
  7555.  
  7556.  dc.w $0c01,$ff00
  7557.  dc.w bplcon0,$5201
  7558.   
  7559.  dc.w $ffff,$fffe
  7560.  
  7561.  cnop 0,64
  7562. FacePlace:
  7563.  ds.l 6*32*5
  7564.  
  7565.  
  7566.  
  7567. ********************************************
  7568. * Stuff you don't have to worry about yet. *
  7569. ********************************************
  7570.  
  7571. closeeverything:
  7572.  
  7573.  
  7574.  jsr mt_end
  7575.  
  7576.  move.l #$dff000,a6
  7577.  move.l old,$dff080     ; Restore old copper list.
  7578.  move.l old,d0
  7579.  move.w d0,ocl
  7580.  swap d0
  7581.  move.w d0,och
  7582.  move.w #$8020,dmacon(a6)
  7583.  move.w #$f,dmacon(a6)
  7584.  move.l saveit,$6c.w
  7585.  move.l OLDKINT,$68.w
  7586.  move.w saveinters,d0
  7587.  or.w #$c000,d0
  7588.  move.w d0,intena(a6)
  7589.  clr.w $dff0a8
  7590.  clr.w $dff0b8
  7591.  clr.w $dff0c8
  7592.  clr.w $dff0d8
  7593.  
  7594. ; move.w #3,d0
  7595. ;nonewvbl
  7596. ; btst #5,intreqrl(a6)
  7597. ; beq.s nonewvbl
  7598. ; move.w #$20,intreq(a6)
  7599. ; dbra d0,nonewvbl
  7600.  
  7601. ; move.l oldview,a1
  7602. ; move.l a1,d0
  7603. ; move.l gfxbase,a6
  7604. ; jsr -$de(a6)
  7605.  
  7606.  
  7607.  cmp.b #'s',mors
  7608.  beq.s leaveold
  7609.  move.w #$f8e,$dff1dc
  7610. leaveold:
  7611.  
  7612.  jsr RELEASEWALLMEM
  7613.  
  7614.  move.l #0,d0
  7615.  
  7616.  rte
  7617.  
  7618. intbase: dc.l 0
  7619. gfxbase: dc.l 0
  7620. oldview: dc.l 0
  7621.  
  7622. stuff:
  7623.  
  7624.     Lea    gfxname(pc),a1    
  7625.     Moveq.l    #0,d0
  7626.     Move.l    $4.w,a6    
  7627.     Jsr    -$228(a6)
  7628.     Move.l     d0,gfxbase
  7629.     Move.l    d0,a6                Use As Base Reg
  7630.     Move.l    34(a6),oldview
  7631.     move.l 38(a6),old
  7632.  
  7633.  jmp endstuff
  7634.  
  7635. gfxname dc.b "graphics.library",0
  7636.  even
  7637. INTUNAME    dc.b    "intuition.library",0
  7638.  
  7639.  even
  7640.  
  7641.  
  7642.  cnop 0,64
  7643.  
  7644. Panel:
  7645.  incbin "PanelRaw"
  7646.  
  7647. TimerScr: ds.b 40*64
  7648.  
  7649. scrntab:
  7650.  ds.b 16
  7651. val SET 32
  7652.  REPT 96
  7653.  dc.b val,val,val
  7654. val SET val+1
  7655.  ENDR
  7656.  ds.b 16
  7657.  
  7658.  cnop 0,64
  7659. scrn:
  7660.  
  7661.  dcb.l 8,$33333333
  7662.  dc.l 0
  7663.  dc.l 0
  7664.  
  7665.  dcb.l 8,$0f0f0f0f
  7666.  dc.l 0
  7667.  dc.l 0
  7668.  
  7669.  dcb.l 8,$00ff00ff
  7670.  dc.l 0
  7671.  dc.l 0
  7672.  
  7673.  dcb.l 8,$0000ffff
  7674.  dc.l 0
  7675.  dc.l 0
  7676.  
  7677.  dc.l 0,-1,0,-1,0,-1,0,-1
  7678.  dc.l 0
  7679.  dc.l 0
  7680.  
  7681.  dc.l -1,-1,0,0,-1,-1,0,0
  7682.  dc.l 0
  7683.  dc.l 0
  7684.  
  7685.  dc.l 0,0,-1,-1,-1,-1,-1,-1
  7686.  dc.l 0
  7687.  dc.l 0
  7688.  
  7689. NumTimes: dc.l 0
  7690. TimeCount: dc.l 0
  7691. oldtime: dc.l 0
  7692. counting: dc.b 0
  7693. oktodisplay: dc.b 0
  7694.  
  7695. INITTIMER:
  7696.  move.l #0,TimeCount
  7697.  move.l #0,NumTimes
  7698.  rts
  7699.  
  7700. STARTCOUNT:
  7701.  move.l d0,-(a7)
  7702.  move.l $dff004,d0
  7703.  and.l #$1ffff,d0
  7704.  move.l d0,oldtime
  7705.  st counting
  7706.  move.l (a7)+,d0
  7707.  rts
  7708.  
  7709. STOPCOUNT:
  7710.  move.l d0,-(a7)
  7711.  move.l $dff004,d0
  7712.  and.l #$1ffff,d0
  7713.  
  7714.  sub.l oldtime,d0
  7715.  cmp.l #-256,d0
  7716.  bge.s okcount
  7717.  add.l #313*256,d0
  7718. okcount:
  7719.  add.l d0,TimeCount
  7720.  addq.l #1,NumTimes
  7721.  clr.b counting
  7722.  move.l (a7)+,d0
  7723.  rts
  7724.  
  7725. STOPCOUNTNOADD:
  7726.  move.l d0,-(a7)
  7727.  move.l $dff004,d0
  7728.  and.l #$1ffff,d0
  7729.  
  7730.  sub.l oldtime,d0
  7731.  cmp.l #-256,d0
  7732.  bge.s okcount2
  7733.  add.l #313*256,d0
  7734. okcount2:
  7735.  add.l d0,TimeCount
  7736.  clr.b counting
  7737.  move.l (a7)+,d0
  7738.  rts
  7739.  
  7740. maxbot: dc.w 0
  7741. tstneg: dc.l 0
  7742.  
  7743. STOPTIMER:
  7744.  st oktodisplay
  7745.  rts
  7746.  
  7747. digits: incbin "numbers.inc"
  7748.  
  7749.  
  7750.  Section Sounds,CODE_C
  7751.  
  7752. Scream: incbin "ab3:sounds/Scream"
  7753.  ds.w 100
  7754. EndScream:
  7755. LowScream: incbin "ab3:sounds/LowScream"
  7756.  ds.w 100
  7757. EndLowScream:
  7758. BaddieGun: incbin "ab3:sounds/BaddieGun"
  7759. EndBaddieGun:
  7760. bass: incbin "ab3:sounds/backbass+drum"
  7761. bassend:
  7762. Shoot: incbin "ab3:sounds/fire!"
  7763. EndShoot:
  7764. Munch: incbin "ab3:sounds/munch"
  7765. EndMunch:
  7766. PooGun: incbin "ab3:sounds/shoot.dm"
  7767. EndPooGun:
  7768. Collect: incbin "ab3:sounds/collect"
  7769. EndCollect:
  7770. DoorNoise: incbin "ab3:sounds/newdoor"
  7771. EndDoorNoise:
  7772. Stomp: incbin "ab3:sounds/footstep3"
  7773. EndStomp:
  7774. SwitchNoise: incbin "ab3:sounds/switch"
  7775. EndSwitch:
  7776. Reload: incbin "ab3:sounds/switch1.SFX"
  7777. EndReload:
  7778. NoAmmo: incbin "ab3:sounds/noammo"
  7779. EndNoAmmo:
  7780. Splotch: incbin "ab3:sounds/splotch"
  7781. EndSplotch:
  7782. SplatPop: incbin "ab3:sounds/splatpop"
  7783. EndSplatPop:
  7784. Boom: incbin "ab3:sounds/boom"
  7785. EndBoom:
  7786. Hiss: incbin "ab3:sounds/newhiss"
  7787. EndHiss:
  7788. Howl1: incbin "ab3:sounds/howl1"
  7789. EndHowl1:
  7790. Howl2: incbin "ab3:sounds/howl2"
  7791. EndHowl2:
  7792. Pant: incbin "ab3:sounds/pant"
  7793. EndPant:
  7794. Whoosh: incbin "ab3:sounds/whoosh"
  7795. EndWhoosh:
  7796. ROAR: incbin "ab3:sounds/bigscream"
  7797. EndROAR
  7798.  SECTION music,code_c
  7799.  
  7800. UseAllChannels: dc.w 0
  7801.  
  7802. mt_init:move.l    mt_data,a0
  7803.     move.l    a0,a1
  7804.     add.l    #$3b8,a1
  7805.     moveq    #$7f,d0
  7806.     moveq    #0,d1
  7807. mt_loop:move.l    d1,d2
  7808.     subq.w    #1,d0
  7809. mt_lop2:move.b    (a1)+,d1
  7810.     cmp.b    d2,d1
  7811.     bgt.s    mt_loop
  7812.     dbf    d0,mt_lop2
  7813.     addq.b    #1,d2
  7814.  
  7815.     lea    mt_samplestarts(pc),a1
  7816.     asl.l    #8,d2
  7817.     asl.l    #2,d2
  7818.     add.l    #$43c,d2
  7819.     add.l    a0,d2
  7820.     move.l    d2,a2
  7821.     moveq    #$1e,d0
  7822. mt_lop3:clr.l    (a2)
  7823.     move.l    a2,(a1)+
  7824.     moveq    #0,d1
  7825.     move.w    42(a0),d1
  7826.     asl.l    #1,d1
  7827.     add.l    d1,a2
  7828.     add.l    #$1e,a0
  7829.     dbf    d0,mt_lop3
  7830.  
  7831.     or.b    #$2,$bfe001
  7832.     move.b    #$6,mt_speed
  7833.     clr.w    $dff0a8
  7834.     clr.w    $dff0b8
  7835.     clr.w    $dff0c8
  7836.     clr.w    $dff0d8
  7837.     clr.b    mt_songpos
  7838.     clr.b    mt_counter
  7839.     clr.w    mt_pattpos
  7840.     rts
  7841.  
  7842. mt_end:    clr.w    $dff0a8
  7843.     clr.w    $dff0b8
  7844.     clr.w    $dff0c8
  7845.     clr.w    $dff0d8
  7846.     move.w    #$f,$dff096
  7847.     rts
  7848.  
  7849. mt_music:
  7850.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  7851.     move.l    mt_data,a0
  7852.     addq.b    #$1,mt_counter
  7853.     move.b    mt_counter,D0
  7854.     cmp.b    mt_speed,D0
  7855.     blt.s    mt_nonew
  7856.     clr.b    mt_counter
  7857.     bra    mt_getnew
  7858.  
  7859. mt_nonew:
  7860.     lea    mt_voice1(pc),a6
  7861.     lea    $dff0a0,a5
  7862.     bsr    mt_checkcom
  7863.     lea    mt_voice2(pc),a6
  7864.     lea    $dff0b0,a5
  7865.     bsr    mt_checkcom
  7866.     tst.b UseAllChannels
  7867.     beq mt_endr
  7868.      lea    mt_voice3(pc),a6
  7869.     lea    $dff0c0,a5
  7870.     bsr    mt_checkcom
  7871.     lea    mt_voice4(pc),a6
  7872.     lea    $dff0d0,a5
  7873.     bsr    mt_checkcom
  7874.     bra    mt_endr
  7875.  
  7876. mt_arpeggio:
  7877.     moveq    #0,d0
  7878.     move.b    mt_counter,d0
  7879.     divs    #$3,d0
  7880.     swap    d0
  7881.     cmp.w    #$0,d0
  7882.     beq.s    mt_arp2
  7883.     cmp.w    #$2,d0
  7884.     beq.s    mt_arp1
  7885.  
  7886.     moveq    #0,d0
  7887.     move.b    $3(a6),d0
  7888.     lsr.b    #4,d0
  7889.     bra.s    mt_arp3
  7890. mt_arp1:moveq    #0,d0
  7891.     move.b    $3(a6),d0
  7892.     and.b    #$f,d0
  7893.     bra.s    mt_arp3
  7894. mt_arp2:move.w    $10(a6),d2
  7895.     bra.s    mt_arp4
  7896. mt_arp3:asl.w    #1,d0
  7897.     moveq    #0,d1
  7898.     move.w    $10(a6),d1
  7899.     lea    mt_periods(pc),a0
  7900.     moveq    #$24,d7
  7901. mt_arploop:
  7902.     move.w    (a0,d0.w),d2
  7903.     cmp.w    (a0),d1
  7904.     bge.s    mt_arp4
  7905.     addq.l    #2,a0
  7906.     dbf    d7,mt_arploop
  7907.     rts
  7908. mt_arp4:move.w    d2,$6(a5)
  7909.     rts
  7910.  
  7911. mt_getnew:
  7912.     move.l    mt_data,a0
  7913.     move.l    a0,a3
  7914.     move.l    a0,a2
  7915.     add.l    #$c,a3
  7916.     add.l    #$3b8,a2
  7917.     add.l    #$43c,a0
  7918.  
  7919.     moveq    #0,d0
  7920.     move.l    d0,d1
  7921.     move.b    mt_songpos,d0
  7922.     move.b    (a2,d0.w),d1
  7923.     asl.l    #8,d1
  7924.     asl.l    #2,d1
  7925.     add.w    mt_pattpos,d1
  7926.     clr.w    mt_dmacon
  7927.  
  7928.     lea    $dff0a0,a5
  7929.     lea    mt_voice1(pc),a6
  7930.     bsr.s    mt_playvoice
  7931.     lea    $dff0b0,a5
  7932.     lea    mt_voice2(pc),a6
  7933.     bsr.s    mt_playvoice
  7934.     tst.b UseAllChannels
  7935.     beq mt_setdma
  7936.     lea    $dff0c0,a5
  7937.     lea    mt_voice3(pc),a6
  7938.     bsr.s    mt_playvoice
  7939.     lea    $dff0d0,a5
  7940.     lea    mt_voice4(pc),a6
  7941.     bsr.s    mt_playvoice
  7942.     bra    mt_setdma
  7943.  
  7944. mt_playvoice:
  7945.     move.l    (a0,d1.l),(a6)
  7946.     addq.l    #4,d1
  7947.     moveq    #0,d2
  7948.     move.b    $2(a6),d2
  7949.     and.b    #$f0,d2
  7950.     lsr.b    #4,d2
  7951.     move.b    (a6),d0
  7952.     and.b    #$f0,d0
  7953.     or.b    d0,d2
  7954.     tst.b    d2
  7955.     beq.s    mt_setregs
  7956.     moveq    #0,d3
  7957.     lea    mt_samplestarts(pc),a1
  7958.     move.l    d2,d4
  7959.     subq.l    #$1,d2
  7960.     asl.l    #2,d2
  7961.     mulu    #$1e,d4
  7962.     move.l    (a1,d2.l),$4(a6)
  7963.     move.w    (a3,d4.l),$8(a6)
  7964.     move.w    $2(a3,d4.l),$12(a6)
  7965.     move.w    $4(a3,d4.l),d3
  7966.     tst.w    d3
  7967.     beq.s    mt_noloop
  7968.     move.l    $4(a6),d2
  7969.     asl.w    #1,d3
  7970.     add.l    d3,d2
  7971.     move.l    d2,$a(a6)
  7972.     move.w    $4(a3,d4.l),d0
  7973.     add.w    $6(a3,d4.l),d0
  7974.     move.w    d0,8(a6)
  7975.     move.w    $6(a3,d4.l),$e(a6)
  7976.     move.w    $12(a6),d0
  7977.     asr.w #2,d0
  7978.     move.w d0,$8(a5)
  7979.     bra.s    mt_setregs
  7980. mt_noloop:
  7981.     move.l    $4(a6),d2
  7982.     add.l    d3,d2
  7983.     move.l    d2,$a(a6)
  7984.     move.w    $6(a3,d4.l),$e(a6)
  7985.     move.w    $12(a6),d0
  7986.     asr.w #2,d0
  7987.     move.w d0,$8(a5)
  7988. mt_setregs:
  7989.     move.w    (a6),d0
  7990.     and.w    #$fff,d0
  7991.     beq    mt_checkcom2
  7992.     move.b    $2(a6),d0
  7993.     and.b    #$F,d0
  7994.     cmp.b    #$3,d0
  7995.     bne.s    mt_setperiod
  7996.     bsr    mt_setmyport
  7997.     bra    mt_checkcom2
  7998. mt_setperiod:
  7999.     move.w    (a6),$10(a6)
  8000.     and.w    #$fff,$10(a6)
  8001.     move.w    $14(a6),d0
  8002.     move.w    d0,$dff096
  8003.     clr.b    $1b(a6)
  8004.  
  8005.     move.l    $4(a6),(a5)
  8006.     move.w    $8(a6),$4(a5)
  8007.     move.w    $10(a6),d0
  8008.     and.w    #$fff,d0
  8009.     move.w    d0,$6(a5)
  8010.     move.w    $14(a6),d0
  8011.     or.w    d0,mt_dmacon
  8012.     bra    mt_checkcom2
  8013.  
  8014. mt_setdma:
  8015.      move.w #250,d0
  8016. mt_wait:
  8017.      add.w #1,testchip
  8018.      dbra d0,mt_wait
  8019.     move.w    mt_dmacon,d0
  8020.     or.w    #$8000,d0
  8021.     and.w #%1111111111110011,d0
  8022.     move.w    d0,$dff096
  8023.     move.w #250,d0
  8024. mt_wait2:
  8025.     add.w #1,testchip
  8026.     dbra    d0,mt_wait2
  8027.     lea    $dff000,a5
  8028.     tst.b UseAllChannels
  8029.     beq.s noall
  8030.     lea    mt_voice4(pc),a6
  8031.     move.l    $a(a6),$d0(a5)
  8032.     move.w    $e(a6),$d4(a5)
  8033.     lea    mt_voice3(pc),a6
  8034.     move.l    $a(a6),$c0(a5)
  8035.     move.w    $e(a6),$c4(a5)
  8036. noall:
  8037.     lea    mt_voice2(pc),a6
  8038.     move.l    $a(a6),$b0(a5)
  8039.     move.w    $e(a6),$b4(a5)
  8040.     lea    mt_voice1(pc),a6
  8041.     move.l    $a(a6),$a0(a5)
  8042.     move.w    $e(a6),$a4(a5)
  8043.  
  8044.     add.w    #$10,mt_pattpos
  8045.     cmp.w    #$400,mt_pattpos
  8046.     bne.s    mt_endr
  8047. mt_nex:    clr.w    mt_pattpos
  8048.     clr.b    mt_break
  8049.     addq.b    #1,mt_songpos
  8050.     and.b    #$7f,mt_songpos
  8051.     move.b    mt_songpos,d1
  8052. ;    cmp.b    mt_data+$3b6,d1
  8053. ;    bne.s    mt_endr
  8054. ;    move.b    mt_data+$3b7,mt_songpos
  8055. mt_endr:tst.b    mt_break
  8056.     bne.s    mt_nex
  8057.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  8058.     rts
  8059.  
  8060. mt_setmyport:
  8061.     move.w    (a6),d2
  8062.     and.w    #$fff,d2
  8063.     move.w    d2,$18(a6)
  8064.     move.w    $10(a6),d0
  8065.     clr.b    $16(a6)
  8066.     cmp.w    d0,d2
  8067.     beq.s    mt_clrport
  8068.     bge.s    mt_rt
  8069.     move.b    #$1,$16(a6)
  8070.     rts
  8071. mt_clrport:
  8072.     clr.w    $18(a6)
  8073. mt_rt:    rts
  8074.  
  8075. CODESTORE: dc.l 0
  8076.  
  8077. mt_myport:
  8078.     move.b    $3(a6),d0
  8079.     beq.s    mt_myslide
  8080.     move.b    d0,$17(a6)
  8081.     clr.b    $3(a6)
  8082. mt_myslide:
  8083.     tst.w    $18(a6)
  8084.     beq.s    mt_rt
  8085.     moveq    #0,d0
  8086.     move.b    $17(a6),d0
  8087.     tst.b    $16(a6)
  8088.     bne.s    mt_mysub
  8089.     add.w    d0,$10(a6)
  8090.     move.w    $18(a6),d0
  8091.     cmp.w    $10(a6),d0
  8092.     bgt.s    mt_myok
  8093.     move.w    $18(a6),$10(a6)
  8094.     clr.w    $18(a6)
  8095. mt_myok:move.w    $10(a6),$6(a5)
  8096.     rts
  8097. mt_mysub:
  8098.     sub.w    d0,$10(a6)
  8099.     move.w    $18(a6),d0
  8100.     cmp.w    $10(a6),d0
  8101.     blt.s    mt_myok
  8102.     move.w    $18(a6),$10(a6)
  8103.     clr.w    $18(a6)
  8104.     move.w    $10(a6),$6(a5)
  8105.     rts
  8106.  
  8107. mt_vib:    move.b    $3(a6),d0
  8108.     beq.s    mt_vi
  8109.     move.b    d0,$1a(a6)
  8110.  
  8111. mt_vi:    move.b    $1b(a6),d0
  8112.     lea    mt_sin(pc),a4
  8113.     lsr.w    #$2,d0
  8114.     and.w    #$1f,d0
  8115.     moveq    #0,d2
  8116.     move.b    (a4,d0.w),d2
  8117.     move.b    $1a(a6),d0
  8118.     and.w    #$f,d0
  8119.     mulu    d0,d2
  8120.     lsr.w    #$6,d2
  8121.     move.w    $10(a6),d0
  8122.     tst.b    $1b(a6)
  8123.     bmi.s    mt_vibmin
  8124.     add.w    d2,d0
  8125.     bra.s    mt_vib2
  8126. mt_vibmin:
  8127.     sub.w    d2,d0
  8128. mt_vib2:move.w    d0,$6(a5)
  8129.     move.b    $1a(a6),d0
  8130.     lsr.w    #$2,d0
  8131.     and.w    #$3c,d0
  8132.     add.b    d0,$1b(a6)
  8133.     rts
  8134.  
  8135. mt_nop:    move.w    $10(a6),$6(a5)
  8136.     rts
  8137.  
  8138.  
  8139. mt_checkcom:
  8140.     move.w    $2(a6),d0
  8141.     and.w    #$fff,d0
  8142.     beq.s    mt_nop
  8143.     move.b    $2(a6),d0
  8144.     and.b    #$f,d0
  8145.     tst.b    d0
  8146.     beq    mt_arpeggio
  8147.     cmp.b    #$1,d0
  8148.     beq.s    mt_portup
  8149.     cmp.b    #$2,d0
  8150.     beq    mt_portdown
  8151.     cmp.b    #$3,d0
  8152.     beq    mt_myport
  8153.     cmp.b    #$4,d0
  8154.     beq    mt_vib
  8155.     move.w    $10(a6),$6(a5)
  8156.     cmp.b    #$a,d0
  8157.     beq.s    mt_volslide
  8158.     rts
  8159.  
  8160. mt_volslide:
  8161.     moveq    #0,d0
  8162.     move.b    $3(a6),d0
  8163.     lsr.b    #4,d0
  8164.     tst.b    d0
  8165.     beq.s    mt_voldown
  8166.     add.w    d0,$12(a6)
  8167.     cmp.w    #$40,$12(a6)
  8168.     bmi.s    mt_vol2
  8169.     move.w    #$40,$12(a6)
  8170. mt_vol2:move.w    $12(a6),d0
  8171.     asr.w #2,d0
  8172.     move.w d0,$8(a5)
  8173.     rts
  8174.  
  8175. mt_voldown:
  8176.     moveq    #0,d0
  8177.     move.b    $3(a6),d0
  8178.     and.b    #$f,d0
  8179.     sub.w    d0,$12(a6)
  8180.     bpl.s    mt_vol3
  8181.     clr.w    $12(a6)
  8182. mt_vol3:move.w    $12(a6),d0
  8183.     asr.w #2,d0
  8184.     move.w d0,$8(a5)
  8185.     rts
  8186.  
  8187. mt_portup:
  8188.     moveq    #0,d0
  8189.     move.b    $3(a6),d0
  8190.     sub.w    d0,$10(a6)
  8191.     move.w    $10(a6),d0
  8192.     and.w    #$fff,d0
  8193.     cmp.w    #$71,d0
  8194.     bpl.s    mt_por2
  8195.     and.w    #$f000,$10(a6)
  8196.     or.w    #$71,$10(a6)
  8197. mt_por2:move.w    $10(a6),d0
  8198.     and.w    #$fff,d0
  8199.     move.w    d0,$6(a5)
  8200.     rts
  8201.  
  8202. mt_portdown:
  8203.     clr.w    d0
  8204.     move.b    $3(a6),d0
  8205.     add.w    d0,$10(a6)
  8206.     move.w    $10(a6),d0
  8207.     and.w    #$fff,d0
  8208.     cmp.w    #$358,d0
  8209.     bmi.s    mt_por3
  8210.     and.w    #$f000,$10(a6)
  8211.     or.w    #$358,$10(a6)
  8212. mt_por3:move.w    $10(a6),d0
  8213.     and.w    #$fff,d0
  8214.     move.w    d0,$6(a5)
  8215.     rts
  8216.  
  8217. mt_checkcom2:
  8218.     move.b    $2(a6),d0
  8219.     and.b    #$f,d0
  8220.     cmp.b    #$e,d0
  8221.     beq.s    mt_setfilt
  8222.     cmp.b    #$d,d0
  8223.     beq.s    mt_pattbreak
  8224.     cmp.b    #$b,d0
  8225.     beq.s    mt_posjmp
  8226.     cmp.b    #$c,d0
  8227.     beq.s    mt_setvol
  8228.     cmp.b    #$f,d0
  8229.     beq.s    mt_setspeed
  8230.     rts
  8231.  
  8232. mt_setfilt:
  8233.     move.b    $3(a6),d0
  8234.     and.b    #$1,d0
  8235.     asl.b    #$1,d0
  8236.     and.b    #$fd,$bfe001
  8237.     or.b    d0,$bfe001
  8238.     rts
  8239. mt_pattbreak:
  8240.     not.b    mt_break
  8241.     rts
  8242. mt_posjmp:
  8243.     st reachedend
  8244.     move.b    $3(a6),d0
  8245.     subq.b    #$1,d0
  8246.     move.b    d0,mt_songpos
  8247.     not.b    mt_break
  8248.     rts
  8249. mt_setvol:
  8250.     cmp.b    #$40,$3(a6)
  8251.     ble.s    mt_vol4
  8252.     move.b    #$40,$3(a6)
  8253. mt_vol4:move.b    $3(a6),d0
  8254.     asr.w #2,d0
  8255.     move.w d0,$8(a5)
  8256.     rts
  8257. mt_setspeed:
  8258.     cmp.b    #$1f,$3(a6)
  8259.     ble.s    mt_sets
  8260.     move.b    #$1f,$3(a6)
  8261. mt_sets:move.b    $3(a6),d0
  8262.     beq.s    mt_rts2
  8263.     move.b    d0,mt_speed
  8264.     clr.b    mt_counter
  8265. mt_rts2:rts
  8266.  
  8267. mt_sin:
  8268.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  8269.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  8270.  
  8271. mt_periods:
  8272.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  8273.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  8274.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  8275.  DC.w $007f,$0078,$0071,$0000,$0000
  8276.  
  8277. reachedend: dc.b 0
  8278. mt_speed:    DC.b    6
  8279. mt_songpos:    DC.b    0
  8280. mt_pattpos:    DC.w    0
  8281. mt_counter:    DC.b    0
  8282.  
  8283. mt_break:    DC.b    0
  8284. mt_dmacon:    DC.w    0
  8285. mt_samplestarts:DS.L    $1f
  8286. mt_voice1:    DS.w    10
  8287.         DC.w    1
  8288.         DS.w    3
  8289. mt_voice2:    DS.w    10
  8290.         DC.w    2
  8291.         DS.w    3
  8292. mt_voice3:    DS.w    10
  8293.         DC.w    4
  8294.         DS.w    3
  8295. mt_voice4:    DS.w    10
  8296.         DC.w    8
  8297.         DS.w    3
  8298.  
  8299. testchip: dc.w 0
  8300.  
  8301. ;/* End of File */
  8302. mt_data: dc.l 0
  8303. tstchip: dc.l 0
  8304.  include "SERIAL_NIGHTMARE"
  8305.  
  8306.  
  8307. ingame:
  8308. ; incbin "ab3:includes/ingame"
  8309. gameover: incbin "ab3:includes/gameover"
  8310. welldone: incbin "ab3:includes/welldone"
  8311.